如何在一个查询中选择数据并有条件地组合数据



我有以下表格:

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中选择VH(或两者(值存在于T2中的行,以及附加列RES,如果在T2中找到T1.V值,则该值应为"V";如果T1.H值在T2中,则该行应为"H";如果在T2表中同时存在T1.VT1.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)

最新更新