我有一个表,我想搜索如果有一个列内的值。如果它不存在,我想在另一个表中搜索它。我试过了:
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
。