我正在尝试选择与其对应的代码id
的{{1}},但我只希望那些I
id
是唯一对应的值。正确的I
将id
(5
和3
具有其他8
值以及code
)。使用Oracle SQL。
I
答案 0 :(得分:3)
您可以通过聚合执行此操作:
select id
from t
group by id
having min(code) = 'I' and max(code) = 'I';
如果code
可以是NULL
,则需要考虑其他条件。
答案 1 :(得分:0)
此解决方案的工作原理是将表左键连接到自身上的ID,但代码不同,并查找连接失败的记录。 这将适用于大多数SQL,它可能需要一些调整你的味道
SELECT DISTINCT T0.* FROM [Table] AS T0
LEFT JOIN [Table] AS T1 ON T0.ID = T1.ID AND T0.Code <> T1.Code
WHERE T1.ID IS NULL AND T0.ID = 'I'
答案 2 :(得分:0)
@GordonLinoff方法极有可能是最快的,但根据您的数据,有些替代方案具有不同的性能配置文件。
第一个选项假定:
- 存在具有所有唯一id
值的另一个表
- 您的表格上有(id, code)
SELECT
primary.id
FROM
primary -- the table with a unique list of your IDs
WHERE
'I' = ALL (SELECT code FROM yourtable WHERE yourtable.id = primary.id)
第二个选项假设您的表有两个索引:
- (code, id)
(用于查找具有'I'
代码的ID)
- (id, code)
(用于查找这些ID是否包含任何其他代码)
(与@ZacFaragher答案基本相似。)
SELECT
code_i.id
FROM
your_table code_i
WHERE
code_i.code = 'I'
AND NOT EXISTS (SELECT *
FROM yourtable
WHERE yourtable.id = code_i.id
AND yourtable.code <> 'I'
)
通常值得尝试不同的变体,因为不同的SQL引擎可以更好/更差地处理相关子查询等。