使用通配符和强制子句查询

Query with wildcard and mandatory clauses

我有两个表,TableA 和 TableB,它们必须以这种方式连接

我已经在下面写了查询

SELECT *
FROM TableA  JOIN TableB ON (TableA.ColumnA = TableB.ColumnA) AND
(TableA.ColumnB = TableB.ColumnB OR TableA.ColumnC = TableB.ColumnC)

换句话说,ColumnA应该与ColumnA匹配,而如果ColumnB(来自TableB)为NULL则将其视为通配符,如果ColumnC(来自TableB)为NULL则将其视为通配符。

现在,我怀疑这不会生成正确的结果,因为根据布尔数学

其中有

True AND False = False

我在找什么

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

{这只是大型查询的一部分,所以我不会分享完整的示例,对此我深表歉意}

看看您的逻辑,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