2014-10-26 29 views
0

下面是我想要從中生成輸出表的表t1和表t2。 我的努力是在輸出中不包含y1NULL的行。如何從連接結果中排除NULL行

+--------------+ +--------------+ 
|  t1  | |  t2  | 
+--------------+ +--------------+ 
| x0 | x1 | x2 | | x0 | y1 |  
+--------------+ +--------------+ 
| a | 10 | a | | a | haha | 
| b | 11 |NULL| | b | NULL | 
| c | 12 | c | | c | foo | 
| d | 13 |NULL| | d | NULL | 
+--------------+ + -----+-------+ 

+--------------+ 
| output | 
+--------------+ 
| x0 | y1 | 
+--------------+ 
| a | haha | 
| c | foo | 
+--------------+ 

我想:

SELECT t1.x2, t2.y1 
FROM t1 
LEFT JOIN t2 ON t1.x0 = t2.x0 

另外:在某些情況下,我行不說NULL,但都只是空單元格。

+4

你已經基本上在你的問題的文字答案。你不需要行「where y1 is NULL」,所以'where y1 is NOT NULL'。 – 2014-10-26 17:35:19

+0

可能'WHERE t1.x2不是NULL並且t2.y1不是NULL' – BentCoder 2014-10-26 17:46:36

回答

1

您需要:

SELECT t1.x2, t2.y1 
FROM t1 
LEFT JOIN t2 ON t1.x0 = t2.x0 
WHERE y1 IS NOT NULL AND y1 <> '' 
+0

謝謝。我發現我的表並不真正說'NULL'。我只是有一個空單元格。這怎麼會在WHERE條款中翻譯?因爲當我嘗試它時,所有行仍然被檢索到。 – oaklander114 2014-10-26 17:47:10

+0

@ oaklander114我更新了我的答案,爲NULL和空字符串工作。你能否更新你的問題以反映需要檢查空字符串? – trnelson 2014-10-26 17:49:58

+0

'WHERE(t1.x2不是NULL或t1.x2 <>'')AND(t2.y1不是NULL或t2.y1 <>'')' – BentCoder 2014-10-26 17:50:37

0

此:

SELECT 
t1.*, 
t2.* 
FROM t1, t2 
WHERE 
(t1.x2 IS NOT NULL AND t1.x2 <> '') AND (t2.y1 IS NOT NULL AND t2.y1 <> '') 

會給你:

'1', 'a', '10', 'a', '1', 'a', 'haha' 
'1', 'a', '10', 'a', '4', 'd', 'foo'