我在制定查询时遇到了一些麻烦,想知道是否有人可以提供帮助。我在这里将表格信息简化到最低限度,以尝试让我更容易理解我正在尝试做的事情。我有两个表 A 和 B。A 有一个 BId 列和一个 Value 字段。B 有与问题无关的信息。我想要做的是基于任意布尔逻辑返回一组 B,该逻辑基于包含 BId 并匹配某个值的 A 的存在。另外,我想返回匹配的值。下面是我在查询中想要的一个几乎可行的示例:
SELECT * FROM B
WHERE
(
(
EXISTS (
SELECT a1.Value FROM A as a1 WHERE a1.BId = B.Id AND a1.Value = "X"
)
AND EXISTS (
SELECT a2.Value FROM A as a2 WHERE a2.BId = B.Id AND a2.Value = "Y"
)
)
OR EXISTS (
SELECT a3.Value FROM A as a3 WHERE a3.BId = B.Id AND a3.Value = "Z"
)
);
就 B 返回而言,这正是我想要的,但是我需要能够返回匹配的值。因此,如果有一个 A 的值为 X,另一个 A 的值为 Y,我希望 a1 和 a2 的值 X 和 Y 包含在行中。如果没有值为 Z 的 A,则该行中将返回 NULL。我不确定这样做的语法或可能性。我尝试的另一种方法是使用 JOIN:
SELECT *, a1.Value, a2.Value FROM B
INNER JOIN A AS a1 ON a1.BId = B.Id
INNER JOIN A AS a2 on a2.BId = B.Id
WHERE
(
(
a1.Value = "X" AND a2.Value = "Y"
)
OR
(
a1.Value = "Z"
)
);
这会正确返回值,但仅在 X 和 Y 匹配时才有效。如果 Z 匹配,因为有两个 JOIN 语句来完成第一部分,我得到重复的结果。出于这个原因,我对使用这种方法持怀疑态度。像这样使用 JOIN 似乎不太合适。如果有人能理解我正在尝试做的事情并指出我正确的方向,那将不胜感激。谢谢!