我希望我能解释自己很好,所以我有2个表与一对多连接(TableA和TableB)。现在,TableB有一个外键形式为TableA的列,以及一个到第三个TableC的ID(外键)。现在通常2到3行共享来自TableA的相同FK,这是我可能的情况:
具有相同FK_TableA的所有行都具有NULL或相同的FK_TableC,如下所示:
TableB
----------------------------
|ID| FK_TableA | FK_TableC |
----------------------------
|1 | 123 | 321 |
|2 | 123 | 321 |
|3 | 123 | NULL |
----------------------------
因此,2行不能具有相同的FK_TableA和不同的FK_TableC它们是相同的或者在它上面而另一行是null或全部为空。
现在我的问题是如何基于FK_TableA明确地选择FK_TableC,以便如果任何具有FK_TableA的行具有值(非空),则选择该值为null并将结果连接到TableA?
我一直在尝试使用JOINS和FROM - WHERE但我总是丢失或双行。所以从上表中我需要选择如下:
TmpTable
-------------------------
| FK_TableA | FK_TableC |
-------------------------
| 123 | 321 | => From Above
| 124 | NULL | => If all FK_TableC ware null
| 125 | 325 | => If at least one or all FK_TableC ware 325
-------------------------
提前谢谢。
答案 0 :(得分:0)
我找到了答案,感谢这个问题的回答Easiest way to eliminate NULLs in SELECT DISTINCT?,也许我不应该匆忙提出这个问题。我的查询看起来像这样:
SELECT A.ID, A.NAME, C.ID_D FROM TABLE TableA A
LEFT JOIN (SELECT DISTINCT FK_TableA, MAX(FK_TableC) AS ID_C FROM TableB
GROUP BY (FK_TableA)) B ON B.FK_TableA = A.ID
LEFT JOIN TableC C ON C.ID = B.ID_C