Oracle SQL 选择 ID,其中 3 个条件共享相同的 ID

问题描述 投票:0回答:1

我的问题是这个,我收到了这样的查询:

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。 我真的不明白该怎么做。

你知道怎么做吗?

sql oracle-sqldeveloper
1个回答
0
投票

为了简单起见,我们将这些表称为

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';
© www.soinside.com 2019 - 2024. All rights reserved.