問題是還返回包含空值的行。下面是創建表並使用示例數據填充它的SQL代碼。完全外部自我加入
我期待下面,但查詢不顯示空值的兩行。
src_t1 id1_t1 id2_t1 val_t1 src_t2 id1_t2 id2_t2 val_t2 b z z 4 a w w 100 b w w 1 a x x 200 b x x 2 a y y 300
數據:
CREATE TABLE sample (
src VARCHAR(6)
,id1 VARCHAR(6)
,id2 VARCHAR(6)
,val FLOAT
);
INSERT INTO sample (src, id1, id2, val)
VALUES ('a', 'w', 'w', 100)
,('b', 'w', 'w', 1)
,('a', 'x', 'x', 200)
,('b', 'x', 'x', 2)
,('a', 'y', 'y', 300)
,('b', 'z', 'z', 4)
;
這是我的測試查詢。當t1.src ='a'和t1.id1 ='y'或者當t2.src ='b'和t2.id1 ='z'時,它不顯示結果。
爲什麼?
什麼是正確的查詢?
SELECT t1.src, t1.id1, t1.id2, t1.val
,t2.src as src2, t2.id1, t2.id2, t2.val
FROM sample t1 FULL OUTER JOIN sample t2
ON t1.id1 = t2.id1 AND t1.id2 = t2.id2
WHERE (t1.src = 'a' AND t2.src = 'b')
OR (t1.src IS NULL AND t1.id1 IS NULL AND t1.id2 IS NULL)
OR (t2.src IS NULL AND t2.id1 IS NULL AND t2.id2 IS NULL)
我也試過WHERE
子句中移動的條件爲ON
條款也是如此。
TIA。
從我的答案適應SQL中的其他問題,在這裏它看起來像'從(SELECT * FROM樣本其中src ='a')t1完整外連接(select * from sample where src ='b')t2 on t2.id1 = t1.id1 and t2.id2 = t1.id2':http://www.sqlfiddle。 com /#!6/e7b1e/3 – hvd
@hvd謝謝。這樣可行。如此簡單,當你知道如何。 – Karl
@ hvd如果您將它作爲答案發布,我會很樂意接受它。 – Karl