gpt4 book ai didi

php - MySQL 多元素匹配 where (A, B, Z) IN (A,B,C,E,Z)

转载 作者:行者123 更新时间:2023-11-29 05:12:40 25 4
gpt4 key购买 nike

我正在尝试创建一个 MySQL 查询,以获取数据库中具有所有给定标签的所有行。

目前我有这个:

 WHERE "tag1" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)

这适用于一个标签,但如果我有多个标签,我不想多次复制粘贴此查询并使用 AND 加入它们,因为它看起来很慢多次选择所有标签。

有什么办法可以做这样的事情吗?

 WHERE ("tag1", "tag2", "tag3") IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)

这意味着我的客户拥有所有标签:tag1、tag2、tag3

如果我尝试执行最后一个查询,我会收到此错误:Operand should contain 3 column(s)

所以,我目前的解决方案是这样的:

WHERE "tag1" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)
AND "tag2" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)
AND "tag3" IN (SELECT tag FROM tag_list WHERE client.id = tag_list.id)

这似乎根本不是最佳选择。

表结构:

client [id, name]
tag_list [FK id references client.id, tag]

因此每个客户端都可以有多个标签,我只想检索具有所有给定标签的客户端。

最佳答案

省略子查询,你应该是好的:

JOIN tag_list tag1 ON client.id = tag1.id AND tag1.tag = "tag1"
JOIN tag_list tag2 ON client.id = tag2.id AND tag2.tag = "tag2"
JOIN tag_list tag3 ON client.id = tag3.id AND tag3.tag = "tag3"

我真的想不出更有效的方法来做到这一点。 Mysql 应该能够轻松优化这一点。

关于php - MySQL 多元素匹配 where (A, B, Z) IN (A,B,C,E,Z),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254709/

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