gpt4 book ai didi

mysql - 不显示其中一个条目具有不需要的值的名称

转载 作者:行者123 更新时间:2023-11-29 16:02:14 25 4
gpt4 key购买 nike

例如有这样一个表“Eaten_food”:

Name       Food
--------------------
Lisa Grapes
Victoria Broccoli
Oliver Carrot
Lisa Apple
Kayla Pineapple
Oliver Banana
Victoria Kiwi
Kayla Grapes

我想做一个查询,只显示不吃葡萄的名字。例如,Kayla 和 Lisa 吃了葡萄,所以她们不应该出现在结果列表中。

SELECT Name FROM Eaten_food WHERE NOT Food = "Grapes" GROUP BY Name

该查询不起作用。在这种情况下什么查询应该是正确的?

最佳答案

SELECT Name
FROM Eaten_food
GROUP BY Name
HAVING BIT_OR(Food = "Grapes") = 0

还有许多其他方法可以编写 HAVING 子句。其中一些是:

HAVING BIT_AND(Food <> "Grapes")
HAVING SUM(Food = "Grapes") = 0
HAVING MAX(Food = "Grapes") = 0

他们都会检查给定组(Name)的Food列中的值绝不是“Grapes”。

上述条件适用于 MySQL,因为 bool 条件返回 01。标准 SQL 条件可能是:

HAVING MAX(CASE Food WHEN 'Grapes' THEN 1 ELSE 0 END) = 0

并且应该适用于任何主要的 RDBMS。

如果您的表(例如 people)具有不同的名称,则可以使用 NOT EXISTS 子查询条件:

SELECT p.Name
FROM people p
WHERE NOT EXISTS (
SELECT *
FROM Eaten_food f
WHERE f.Name = p.Name
AND f.Food = 'Grapes'
)

根据数据,这可能会更快,因为不需要完全读取 Eaten_food

等效查询是:

SELECT p.Name
FROM people p
LEFT JOIN Eaten_food f
ON f.Name = p.Name
AND f.Food = 'Grapes'
WHERE f.Name is NULL

所有查询都将受益于(名称,食物)上的复合索引。

关于mysql - 不显示其中一个条目具有不需要的值的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090562/

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