我有两个表,TableA和TableB必须以这种方式加入
我在下面写了这个
的查询SELECT *
FROM TableA JOIN TableB ON (TableA.ColumnA = TableB.ColumnA) AND
(TableA.ColumnB = TableB.ColumnB OR TableA.ColumnC = TableB.ColumnC)
总之,如果ColumnB(来自TableB)为NULL,则ColumnA应与ColumnA匹配,然后将其视为通配符,如果ColumnC(From TableB)为NULL,则将其视为通配符。
现在,我怀疑这不会产生正确的结果,因为按照布尔数学
哪个
真与假=假
我在寻找什么
True AND (True OR False) = True
True AND (True OR True) = True
True AND (False OR True) = True
False AND (True OR True) = False
False AND (True or False) = False
False AND (False OR True) = False
False AND (False OR False) = False
{这只是大型查询的一部分,所以我不是要分享完整的例子,我很抱歉}
答案 0 :(得分:2)
看看你的逻辑,B列和C列真的只是红色的鲱鱼,你可以放心地忽略它们。所以你的查询要简单得多:
SELECT *
FROM TableA
JOIN TableB
ON TableA.ColumnA = TableB.ColumnA
此外,您可能希望列指示B或C也匹配,因此您可以执行此操作:
SELECT *,
CASE
WHEN TableA.ColumnB = TableB.ColumnB OR TableA.ColumnC = TableB.ColumnC
THEN 0
ELSE 1 END
AS IsWildcard
FROM TableA
JOIN TableB
ON TableA.ColumnA = TableB.ColumnA