在另一个表中搜索当前不存在的值



我有一个表,我想搜索如果有一个列内的值。如果它不存在,我想在另一个表中搜索它。我试过了:

SELECT *,
CASE(WHEN student = 'ted' THEN 'ted'
ELSE ( SELECT student
FROM  dbo.class2
WHERE student= 'ted')) END AS ISOK 
from dbo.class1 

因此,如果dbo.class1.student不是'ted',ISOK列将取dbo.class2.student的值。

虽然上面的查询是错误的,因为它返回更多的值。

我很确定我正在尝试的方法是错误的。

你能试一下吗?

SELECT
NVL(a.student, b.student) ISOK
FROM dbo.class1 a 
FULL OUTER JOIN dbo.class2 b ON a.student=b.student

完全外连接将确保您从两个表(匹配+ a.非匹配+ b.非匹配)中获得所有数据。

你很接近,但我认为这是你正在寻找的。它们在不同的表中这一事实对CASE来说并不重要,重要的是JOIN:

SELECT *, 
Case WHEN class1.student = 'ted' THEN 'ted'
ELSE class2.student='ted'
END as ISOK
FROM class1
join class2 on class1.student = class2.student

如果您想查看某个特定的学生是否在表中,请使用exists。我认为这样的东西会很有用:

select (case when exists (select 1 from class1 c1 where c1.name = 'Ted')
then 'class1'
when exists (select 1 from class2 c2 where c2.name = 'Ted')
then 'class2'
end) as which_table

如果名称在两个表中都没有,则值为NULL

相关内容

  • 没有找到相关文章

最新更新