所以这很令人困惑,但让我们从下表开始:
Table1 Table2
ID1 | ID2 || ID1 | ID2
----------- || -----------
jve | 234 || jve | null
null | 234 || dav | 234
rev | 584 || rev | null
null | 584 || ewj | 584
avv | 442 || avv | null
null | 442 || pol | 442
*表格的组织是为了便于理解,但实际上并非如此
我想做的是在 T1.ID1 = T2.ID1 上加入 Table1 和 Table2。但是,如果 ID1 恰好为 null,那么我想在 T1.ID2 = T2.ID2 而不是第一种方式上加入它们。
我用谷歌搜索得到的是
SELECT *
FROM table1 t1
INNER JOIN table2 t2
ON ( t1.ID1 = COALESCE (t2.ID1, t1.ID1)
AND t1.ID2 = COALESCE (t2.ID2, t1.ID2))
WHERE ID2 = '234';
我想要弹出的结果只是水平合并上面的表格:
Results
-------
jve | 234 | jve | null
null | 234 | dav | 234
etc..
这样做的原因是除了 ID2 之外还有更多的列,我试图在表 1 和表 2 之间对齐。
这里的主要问题是我不确定如何表达逻辑,
if( T1.ID1 == null )
{
ON T1.ID2 = T2.ID2
}
else
{
ON T1.ID1 = T2.ID1
}
进入SQL
如果需要更多信息,我很乐意添加到我的帖子中。
我忘了包括如果它加入第一种方式,它不应该之后加入第二种方式。我的意思是,第一行,jve | 234应该加入jve | null 然后是下一行,null |应该抢234而不是加入jve | 234 到 dav | 234...如果这有意义的话..
我需要这两个表使用一种或另一种方法连接,但不能同时使用这两种方法。
最佳答案
您的逻辑听起来像是 ON
子句中的 OR
条件:
SELECT *
FROM table1 t1 INNER JOIN
table2 t2
ON t1.ID1 = t2.ID1 OR
(t1.ID1 IS NULL AND t1.ID2 = t2.ID2)
WHERE t1.ID2 = '234';
关于mysql - 你如何基于一列连接两个表,除非它为空,在这种情况下,基于两个不同的列连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34006985/