gpt4 book ai didi

MySQL 在查询中使用列值

转载 作者:行者123 更新时间:2023-11-29 07:32:30 24 4
gpt4 key购买 nike

+-------------+----------+-----------+
| animal_name | tag_name | tag_group |
+-------------+----------+-----------+
| CatBlue | cat | species |
| CatBlue | blue | colour |
| DogBlue | dog | species |
| DogBlue | blue | colour |
| DogRed | dog | species |
| DogRed | red | colour |
+-------------+----------+-----------+

上表是各种连接表的简化 View 。

它是根据所选标签返回结果的系统的一部分。问题是如果选择了 blue 和 cat 标签,系统当前也会返回 DogBlue。 (它在 SQL 中使用 OR)

在 MySQL 中,如何只搜索所有标签组中具有一个或多个标签的动物?是否可以在查询中使用 tag_group 列值?

编辑:我希望能够请求动物具有颜色 blue 和物种 cat 的表格行。 WHERE tag_name = cat OR tag_name = blue 也会带来狗。

最佳答案

要获得具有所有这些属性的 animal_name,您可以使用条件聚合,如

SELECT animal_name
FROM table1
GROUP BY animal_name
HAVING SUM(CASE WHEN tag_name = 'cat' AND tag_group = 'species' THEN 1 ELSE 0 END ) > 0
AND SUM(CASE WHEN tag_name = 'blue' AND tag_group = 'colour' THEN 1 ELSE 0 END ) > 0
;

使用 Mysql 你也可以使用 sum(a=b), SUM(tag_name = 'blue' AND tag_group = 'colour') 作为速记,在里面使用表达式sum() 将得到一个 bool 值 0/1,true/false

Demo

For Blue dog

SELECT animal_name
FROM table1
GROUP BY animal_name
HAVING SUM(CASE WHEN tag_name = 'dog' AND tag_group = 'species' THEN 1 ELSE 0 END ) > 0
AND SUM(CASE WHEN tag_name = 'blue' AND tag_group = 'colour' THEN 1 ELSE 0 END ) > 0
;

根据最后一条评论我需要蓝猫和蓝狗添加 OR 条件以同时拥有两个动物名称

SELECT animal_name
FROM table1
GROUP BY animal_name
HAVING (
SUM(CASE WHEN tag_name = 'dog' AND tag_group = 'species' THEN 1 ELSE 0 END ) > 0
AND
SUM(CASE WHEN tag_name = 'blue' AND tag_group = 'colour' THEN 1 ELSE 0 END ) > 0
) OR (
SUM(CASE WHEN tag_name = 'cat' AND tag_group = 'species' THEN 1 ELSE 0 END ) > 0
AND
SUM(CASE WHEN tag_name = 'blue' AND tag_group = 'colour' THEN 1 ELSE 0 END ) > 0
)

Demo

关于MySQL 在查询中使用列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50627984/

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