我有以下表格:
T1
V | H
--+--
a q
s w
d e
f r
T2
VH
--
a
w
d
e
我需要以下结果:
V | H | RES
--+---+----
a q V
s w H
d e B
也就是说,我需要从T1中选择V
或H
(或两者(值存在于T2中的行,以及附加列RES
,如果在T2中找到T1.V
值,则该值应为"V";如果T1.H
值在T2中,则该行应为"H";如果在T2表中同时存在T1.V
和T1.H
值,则应为"B"。
我需要ANSI SQL查询,没有任何特定的DB引擎语法。
您可以使用CASE WHEN
来实现
SELECT T1.*,
CASE WHEN T1.V IN (SELECT VH FROM T2) AND T1.H IN (SELECT VH FROM T2) THEN 'B'
WHEN T1.V IN (SELECT VH FROM T2) THEN 'V'
WHEN T1.H IN (SELECT VH FROM T2) THEN 'H' ELSE 'N' END AS RES
FROM T1
WHERE RES <> 'N'
我找到了另一种方法:
SELECT 'V' AS RES, T1.* FROM T1
WHERE T1.V IN (SELECT VH FROM T2) AND T1.H NOT IN (SELECT VH FROM T2)
UNION SELECT 'H', T1.* FROM T1
WHERE T1.V NOT IN (SELECT VH FROM T2) AND T1.H IN (SELECT VH FROM T2)
UNION SELECT 'B', T1.* FROM T1
WHERE T1.V IN (SELECT VH FROM T2) AND T1.H IN (SELECT VH FROM T2)