这很难解释,所以我会尽力而为。
我有一个表,它由默认行(由 a 标记NULL
specificSiteID
)和覆盖行(由非标记NULL
specificSiteID
)组成。
这两种类型的行都用于genericID
确定正在加载的数据——有时,某些数据可能没有默认值。
编辑 1:我所指的 Non-nullspecificSiteID
仅在其 siteID 与我要查询的站点ID 匹配时才覆盖默认值。我不会将所有覆盖应用到一个默认值 - 我只将specificSiteID
' 覆盖应用到默认值。
结束编辑 1
我对这个查询有四个要求:
- 当既没有默认值也没有特定于行的覆盖时,不返回任何数据。
- 没有默认数据时返回覆盖数据
- 返回覆盖数据不为空的覆盖数据的覆盖数据
- 最后,当默认数据存在且没有覆盖数据时,只返回默认数据。
现在,我的 SQL 查询看起来像——
SELECT COALESCE( override.Col1 , default.Col1) as Col1,
COALESCE(override.Col2, default.Col2) as Col2
FROM
(SELECT * from tableA where
genericID = 84 AND
specificSiteID IS NULL ) as default
LEFT JOIN
(SELECT * from tableA where
genericID = 84 AND
specificSiteID = 34 ) as override
ON default.genericID = override.genericID;
此脚本的问题是案例 #2 由于LEFT JOIN
. 当没有默认行时LEFT JOIN
,不包括覆盖行。 使用上面的示例,如果没有genericID
= 84 where specificSiteID
is NULL
,则即使有覆盖数据,也不会返回任何数据。
JOIN
我在找什么样的人?我什至可以用JOIN
?