gpt4 book ai didi

php - 如何使用联合语句选择 mysql 数据,其中数据与每个 select 语句匹配,即将 AND 运算符与 UNION 组合?

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

假设我有一个只有两列的表格:姓名心情。一行包含一个人的名字和他们的心情,如果他们有多种心情,那么多行存储在数据库中。

例如,在数据库中是约翰,他很高兴、兴奋和自豪。

这表示为

John Happy
John Excited
John Proud

我想做的是根据遇到的几种心情来选择名字。类似于 UNION:

SELECT name WHERE mood=Happy
UNION
SELECT name WHERE mood=Excited
UNION
SELECT name WHERE mood=Proud

但是使用上面的联合会导致:

John
John
John

Union all 会产生 John 的一个结果,但它也会选择仅匹配查询之一的任何名称。

我可以想到一些算法,这些算法会获取每个单独的 mysql_result 资源(我使用的是 PHP),并寻找匹配的结果,但我想知道的是 MySQL 是否已经促进了这一点。

我意识到以上是一个相当模糊的概括,不用说我的实际程序要复杂得多,我已经为这个问题简化了一点,请不要犹豫提问。

最佳答案

如果你没有重复项,你可以用子查询来完成:

SELECT `name` FROM (
SELECT `name`, COUNT(*) AS `count` FROM `moods`
WHERE `mood` IN ('Excited', 'Happy', 'Proud') GROUP BY `name`
) WHERE `count` = 3

或者,您可以使用连接:

SELECT `m1`.`name` FROM `moods` `m1`
JOIN `moods` `m2` USING (`name`)
JOIN `moods` `m3` USING (`name`)
WHERE `m1`.`mood` = 'Excited' AND `m2`.`mood` = 'Happy' AND `m3`.`mood` = 'Proud'

不太可爱,但如果使用 LIMIT 可能会更快。或者可能不是。很大程度上取决于查询规划器。

UPD:感谢 Tudor Constantin 提醒我 HAVING,第一个查询可以是:

SELECT `name` FROM `moods`
WHERE `mood` IN ('Excited', 'Happy', 'Proud')
GROUP BY `name`
HAVING COUNT(*)>3

关于php - 如何使用联合语句选择 mysql 数据,其中数据与每个 select 语句匹配,即将 AND 运算符与 UNION 组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952330/

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