有条件地从不同的表中选择

时间:2019-03-26 14:54:15

标签: sql

我有两个存放材料的桌子:

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

1 个答案:

答案 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' );
相关问题