gpt4 book ai didi

mysql - MYSQL 查询仅限于一种枚举类型,不包括其他枚举类型

转载 作者:行者123 更新时间:2023-11-29 08:08:10 29 4
gpt4 key购买 nike

我无法理解查询。

我的表结构如下所示:

submitted_name   type             user_submitted_id   submitted_id
Red manager 1 10
Red sales 1 11
Red IT 1 12
Green IT 2 13
Green sales 2 14
Blue sales 3 15
Yellow sales 4 16
Aqua Blue manager 1 17
Lime Green manager 1 18
Lime Green sales 1 19

我将如何编写查询,该查询将仅显示仅具有“销售”类型而没有其他类型的已提交名称。类型是enum数据类型。名称并不唯一。

subscribed_name 不是索引列,该数据库约有 1500 万行。

所以给出这个测试数据,结果应该是

`blue | sales | 2`
'Yellow | sales | 4'

我尝试过做一些不同的事情并按's/havings进行分组,但对于如何准确地构建它一直保持空白。我知道这不是最复杂的问题,但自从我完成 SQL 查询以来已经有一段时间了,并且无法找到为此“谷歌搜索”的最佳方法。

最佳答案

SELECT t1.* FROM my_table t1
LEFT JOIN my_table t2
ON t1.submitted_name = t2.submitted_name AND t1.type != t2.type
WHERE t1.type='sales' AND t2.type IS NULL

这会查找 my_table 中具有 type=sales 的所有记录,并且不存在具有相同 subscribed_name 且具有不同类型的记录.

编辑:替代方法:

SELECT submitted_name,GROUP_CONCAT(`type`) AS `type`,GROUP_CONCAT(`id`) AS `id`
FROM my_table
GROUP BY submitted_name
HAVING `type`='sales'

它的作用是 - 获取所有记录并按 subscribed_name 对它们进行分组,然后将它们过滤为仅具有单一类型“sales”的记录。

我不能保证你的表大小会带来巨大的性能提升(甚至根本没有任何提升,因为无论如何都会对你的 12M 记录表进行全面扫描),但至少不会有加入。

EDIT2:鉴于新信息,使用索引列 (user_subscribed_id) 而不是 subscribed_name 进行联接绝对是个好主意/group by,在这两种情况下。

第一个查询将如下所示:

SELECT t1.* FROM my_table t1
LEFT JOIN my_table t2
ON t1.user_submitted_id = t2.user_submitted_id AND t1.type != t2.type
WHERE t1.type='sales' AND t2.type IS NULL

NB:请注意,最好在此查询中指定确切的列,而不是 t.*,这将减少结果集的内存消耗,并可能会带来性能提升。

第二个查询将如下所示:

SELECT submitted_name,GROUP_CONCAT(`type`) AS `type`,GROUP_CONCAT(`id`) AS `id`
FROM my_table
GROUP BY user_submitted_id
HAVING `type`='sales'

关于mysql - MYSQL 查询仅限于一种枚举类型,不包括其他枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308671/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com