如何在联接中的多行上实现 SQL 条件
所提出的问题围绕着从联接中选择拥有两个特定标签的用户手术。虽然使用 IN 提供的示例返回具有任一标签的用户,但期望的结果是检索拥有这两个标签的用户。要实现此目的,利用 ALL 关键字是不合适的。
解决方案
1.测试不同的行
SELECT * FROM users WHERE EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag1') AND EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag2')
SELECT * FROM users WHERE id IN (SELECT user_id FROM tags WHERE name ='tag1') AND id IN (SELECT user_id FROM tags WHERE name ='tag2')
SELECT u.* FROM users u INNER JOIN tags t1 ON u.id = t1.user_id INNER JOIN tags t2 ON u.id = t2.user_id WHERE t1.name = 'tag1' AND t2.name = 'tag2'
2.聚合行
SELECT users.id, users.user_name FROM users INNER JOIN tags ON users.id = tags.user_id WHERE tags.name IN ('tag1', 'tag2') GROUP BY users.id, users.user_name HAVING COUNT(*) = 2
(MySQL Specific) SELECT user.id, users.user_name, GROUP_CONCAT(tags.name) as all_tags FROM users INNER JOIN tags ON users.id = tags.user_id GROUP BY users.id, users.user_name HAVING FIND_IN_SET('tag1', all_tags) > 0 AND FIND_IN_SET('tag2', all_tags) > 0
以上是如何使用 SQL 连接选择具有多个标签的用户?的详细内容。更多信息请关注PHP中文网其他相关文章!