我的问题是这个,我收到了这样的查询:
SELECT ID FROM TABLE LEFT JOIN ANOTHERTABLE ON TABLE.ID=ANOTHERTABLE.ID WHERE TABLE.KEY='X' OR TABLE.KEY='Y' OR TABLE.KEY='Z';
当我执行这个查询时,它会返回多个 id...但 3 个 id 是相同的(因为每个条件都会选择它)。 我需要选择唯一多次出现但不使用计数的 id...基本上我需要选择将按条件 1、2 和 3 选择的唯一 ID。 我真的不明白该怎么做。
你知道怎么做吗?
为了简单起见,我们将这些表称为
A
和 B
。
如果我正确理解了这个问题,那么如果您在
A
中找到了三行以及相应的 B
并且 ID
行具有 B
X、Y 和 Z,那么您只需要 KEY
的行。
我会根据 ID 和相应的
B
加入 KEY
表 3 次,然后在 WHERE 上进行筛选以检查所有三个 B
行是否都存在:
SELECT A.ID FROM A
LEFT JOIN B AS bx ON A.ID = bx.ID AND bx.KEY = 'X'
LEFT JOIN B AS by ON A.ID = by.ID AND by.KEY = 'Y'
LEFT JOIN B AS bz ON A.ID = bz.ID AND bz.KEY = 'Z'
WHERE bx.ID IS NOT NULL AND by.ID IS NOT NULL AND bz.ID IS NOT NULL;
您可以使用
INNER JOIN
稍微简化一下,它将过滤掉找不到相应 B
行的行,从而使 WHERE
条件变得多余:
SELECT A.ID FROM A
INNER JOIN B AS bx ON A.ID = bx.ID AND bx.KEY = 'X'
INNER JOIN B AS by ON A.ID = by.ID AND by.KEY = 'Y'
INNER JOIN B AS bz ON A.ID = bz.ID AND bz.KEY = 'Z';