Select 单选合并多个联接
我试图弄清楚如何编写一个SQL查询,返回另外两个SELECT语句的结果,每个语句都有自己的JOIN。以下是场景: 表1的T1Number和/或T1State列中可能有空值。表2可能有编号或状态匹配的行。我想要表1中的所有行,但要在状态匹配时用T2Number填充任何空T1Number,在数字匹配时用T2State填充任何空T1State。我不希望表2中没有匹配状态或编号的行:Select 单选合并多个联接,select,join,Select,Join,我试图弄清楚如何编写一个SQL查询,返回另外两个SELECT语句的结果,每个语句都有自己的JOIN。以下是场景: 表1的T1Number和/或T1State列中可能有空值。表2可能有编号或状态匹配的行。我想要表1中的所有行,但要在状态匹配时用T2Number填充任何空T1Number,在数字匹配时用T2State填充任何空T1State。我不希望表2中没有匹配状态或编号的行: Table1: Table2: Name T1Number T1S
Table1: Table2:
Name T1Number T1State T2Number T2State
---- -------- ------- -------- -----
Joe 1 NULL 1 MA
Bob NULL CA 2 CA
Dan NULL NULL 3 FL
Sam 4 NY 4 NY
Ray 5 TX 8 PA
因此,我有一个SELECT语句来获取数字:
SELECT
Table1.Name,
Table1.T1Number,
Table1.T1State,
Table2.T2Number,
Table2.T2State
FROM Table1
INNER JOIN Table2 ON Table2.T2State = Table1.T1State
WHERE (Table1.T1Number IS NULL OR Table1.T1State IS NULL)
Result:
Name T1Number T1State T2Number T2State
---- -------- ------- -------- -------
Bob NULL CA 2 CA
和另一个SELECT语句来获取状态:
SELECT
Table1.Name,
Table1.T1Number,
Table1.T1State
Table2.T2Number
Table2.T2State
FROM Table1
INNER JOIN Table2 ON Table2.T2Number = Table1.T1Number
WHERE (Table1.T1Number IS NULL OR Table1.T1State IS NULL)
Result:
Name T1Number T1State T2Number T2State
---- -------- ------- -------- -------
Joe 1 NULL 1 MA
如何编写一个组合SELECT语句,以获得以下所需结果
Name Number State
---- ------ -----
Joe 1 MA
Bob 2 CA
Dan NULL NULL
Sam 4 NY
Ray 5 TX
我假设我需要一个包含SELECT语句,它在Table1和上述查询的并集之间进行左连接,但我知道这比我现在做的要简单。非常感谢。您可以在
join
操作中使用单个select
语句,而不使用where
子句和case
语句。比如:
SELECT t1.Name
, CASE WHEN t1.Number is null then t2.Number else t1.Number END as Number
, CASE WHEN t1.State is null then t2.State else t1.State end as State
FROM Table1 t1
LEFT JOIN Table2 t2
ON CASE WHEN t1.Number is null THEN t1.State
ELSE CONVERT(varchar(1), t1.Number) END
= CASE WHEN t1.Number is null THEN tab2.State
ELSE CONVERT(varchar(1), t2.Number) END