我正在尝试解决以下问题:数据在表中组织,其中列X作为信息的外键(它是标识此表中的一组行的ID,它们属于一个捆绑包,由特定的所有者拥有)另一个表中的实体).因此,X的每个不同值都有多个与之关联的行.我想过滤掉在Q列中包含与其相关联的行的X的所有不同值,其中包含值“ABC”.
即
数据看起来像这样:
Column X Column Q -------- --------- 123 ABC 123 AAA 123 ANQ 456 ANQ 456 PKR 579 AAA 579 XYZ 886 ABC
查询应该返回“456”和“579”,因为X的这两个不同的值在Q列中没有包含值“ABC”的行.
我正在考虑使用减函数(选择不同的X减去(选择不同的X,其中Q =“ABC”)),因为我想要的只是X的不同值.但我想知道是否有更有效的方法这样做可以避免子查询?例如,如果我可以在X上对表进行分区并抛出Q中具有值“ABC”的行的每个分区?
解决方法
这应该工作:
SELECT DISTINCT t.ColX FROM mytable t LEFT JOIN mytable t2 on t.colx = t2.colx and t2.colq = 'ABC' WHERE t2.colx IS NULL
这是SQL Fiddle.
祝好运.