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
如果你想重复的值。
这也会返回randomNumber2或只有id和rn(randomNumber)? – 2013-04-04 13:22:36
@Nicolas - 是的,这将返回randomNumber和randomNumber2及其相应的ID - 当然,ID IN(0,1,2,3)。 – sgeddes 2013-04-04 13:52:38
我建议不要在这里使用子查询。它不会使用表中的索引。 – 2013-04-04 13:58:53