JOIN和ON子句(NULL值)

问题描述:

我有两个表JOIN和ON子句(NULL值)

tableA (id,randomNumber) (2,1),(3,5),(3,2),(6,0),(8,0),... 
tableB (id,randomNumber2) (0,2),(1,3),(2,0),(4,2)... 

现在,我想获取ID,randomnumber和randomnumber2其中来自两个表ID IN(0,1,2,3) 。

所以应该返回:

(2,1), (3,5), (3,2), (0,2), (1,3), (2,0) 

我试着用JOIN和LEFT JOIN结构。

问题是,当ON子句(JOIN上a.id = b.id tableB的b)是不正确的,则返回NULL为ID。但我也需要知道NULL值。例如,对于tableB,它将返回(NULL,2)第一个结果。

(2,1), (3,5), (3,2), (NULL,2), (NULL,3), (2,0) 

我怎样才能得到NULL值,我应该使用别的东西吗?

JOIN当表格有相关数据时使用。在这里,这两张表格没有任何关系。更好的选择是使用UNION

SELECT id, randomNumber 
FROM tableA 
WHERE ID IN (0,1,2,3) 

UNION ALL 

SELECT id, randomNumber2 
FROM tableB 
WHERE ID IN (0,1,2,3) 

或者,只需使用2个单独的查询并合并结果即可。

您可以使用UNION使用子查询:

SELECT id, rn 
FROM (
    SELECT Id, randomNumber rn 
    FROM tableA 
    UNION 
    SELECT Id, randomNumber2 
    FROM tableB 
) t 
WHERE id IN (0,1,2,3) 

您可能需要使用一个UNION ALL如果你想重复的值。

+0

这也会返回randomNumber2或只有id和rn(randomNumber)? – 2013-04-04 13:22:36

+0

@Nicolas - 是的,这将返回randomNumber和randomNumber2及其相应的ID - 当然,ID IN(0,1,2,3)。 – sgeddes 2013-04-04 13:52:38

+0

我建议不要在这里使用子查询。它不会使用表中的索引。 – 2013-04-04 13:58:53