我有两个存放材料的桌子:
Table ProductsA
ID | Description | Date
-----------------------------
1 | Apple Iphone | 01.03.2019
Table ProductsB
ID | Description | Date
-------------------------------
1 | Apple Iphone | 20.03.2019
2 | Samsung Galaxy | 20.03.2019
3 | Dell Laptop | 20.03.2019
如果对ProductsA的第一个查询未返回任何内容,我想从ProductsB返回结果。例如,我想退回日期大于05.03.2019的产品。
我尝试过:
SELECT COALESCE(A.ID, B.ID) as ID,
COALESCE(A.Description, B.Description) as Description
FROM ProductsA as A
INNER JOIN ProductsB as B on B.ID = A.ID
WHERE A.Date >= 05.03.2019
但这不是真的。如果A返回空值,则没有任何连接。我该如何实现?
编辑:我希望当且仅当从ProductsA中找不到任何内容时,才从ProductsA和ProductsB返回值。遵循相同的推理,我希望得到此结果(查询日期晚于05.03.2019的产品):
ID | Description | Date
-------------------------------
1 | Apple Iphone | 20.03.2019
2 | Samsung Galaxy | 20.03.2019
3 | Dell Laptop | 20.03.2019
Edit2:但是,对于日期大于等于01.03.2019的结果,我应该只返回:
ID | Description | Date
-----------------------------
1 | Apple Iphone | 01.03.2019
答案 0 :(得分:2)
您可以像这样使用UNION:
SELECT A.ID,
A.Description
FROM ProductsA AS A
WHERE A.Date >= '2019.03.05'
UNION ALL
SELECT B.ID,
B.Description
FROM ProductsB AS B
WHERE B.Date >= '2019.03.05'
AND NOT EXISTS ( SELECT 1 FROM ProductsA AS A2 WHERE A2.Date >= '2019.03.05' );