2014-10-26 59 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'