Mysql 从集合中排除子集

标签 mysql

我已经尝试解决这个问题有一段时间了,但无济于事!

问题
考虑一个包含一些子集(即 3 个子集)的集合,如下所示:
Collection with 3 subsets

问题
无论如何,我可以选择 COLLECTION 排除 SUB3 吗?

我尝试了很多东西,例如:LEFT JOINJOINNOT INNOT 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/

相关文章:

mysql - Node.js mySQL 无法创建连接

java - ResultSet getDate() 返回不正确和正确的日期

java - 使用 Google App Engine 端点连接到 Cloud SQL

mysql - 安装 MySQL 对 Node JS 的支持

php - 如何根据不同条件从表中获取行数

php - 使用 PHP 在使用 COUNT(*) 的地方输出 MySQL 查询

javascript - 如何循环遍历mysql数据库中的消息并正确显示它们

mysql - 从子查询中返回与条件匹配的单个结果

mysql - 排序以便具有匹配列的行确实粘在一起

mysql - mysql2 Nodejs 池连接出现 ECONNRESET/ETIMEDOUT 错误