我已经尝试解决这个问题有一段时间了,但无济于事!
问题
考虑一个包含一些子集(即 3 个子集)的集合,如下所示:
问题
无论如何,我可以选择 COLLECTION 排除 SUB3 吗?
我尝试了很多东西,例如:LEFT JOIN
、JOIN
、NOT IN
、NOT EXISTS
,以及更多的 SELECT
子查询。
SELECT
t1.*, t2.*
FROM
table AS t1
LEFT JOIN
table AS t2 ON t1.id = t2.id
WHERE
t1.attribute = 'COLLECTION'
AND t2.attribute = 'SUB3'
AND oa2.id IS NULL;
注意
请注意,表
包含大约 7500 万个条目(行),我希望快速获得一些内容!
更新
示例
+-----+-------------+
| id | attribute |
+-----+-------------+
| 1 | vehicle |
| 1 | bus |
| 2 | vehicle |
| 2 | car |
| 3 | vehicle |
| 3 | truck |
+-----+-------------+
Of course there is a second incremental id to avoid duplicate issues!
因此,在这个例子中,我想要除卡车
之外的所有车辆!
请多多指教,
谢谢
最佳答案
使用 NOT EXISTS 删除所有不需要的元素
SELECT *
FROM table t
WHERE t.attribute = 'COLLECTION'
AND NOT EXISTS ( SELECT 'a'
FROM table t2
WHERE t2.id = t.id
AND t2.attribule = 'SUB3'
)
关于Mysql 从集合中排除子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29302957/