使用通配符和强制子句查询
Query with wildcard and mandatory clauses
我有两个表,TableA 和 TableB,它们必须以这种方式连接
- ColumnA 必须匹配
- ColumnB 和 ColumnC 可以匹配(如果不能则应视为通配符)
我已经在下面写了查询
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
我有两个表,TableA 和 TableB,它们必须以这种方式连接
- ColumnA 必须匹配
- ColumnB 和 ColumnC 可以匹配(如果不能则应视为通配符)
我已经在下面写了查询
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