首页 > 数据库 > mysql教程 > 如何使用 JOIN 在 SQL 中选择同时具有'tag1”和'tag2”的用户?

如何使用 JOIN 在 SQL 中选择同时具有'tag1”和'tag2”的用户?

DDD
发布: 2024-12-28 02:08:09
原创
792 人浏览过

How to Select Users with Both 'tag1' and 'tag2' in SQL Using JOINs?

SQL JOIN 中跨多行的条件

问题:在 JOIN 中跨多行应用条件来检索匹配的记录。

目标:选择同时拥有这两者的用户'tag1' 和 'tag2' 标签。

应用

解决这个问题主要有两种方法:

1.测试各个行

A.存在:

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')
登录后复制

B.子查询:

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') 
登录后复制

C.连接:

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。聚合行

A.计数:

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
登录后复制

B.字符串处理:

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 
登录后复制

注意事项

  • 测试单个行:适合小型数据集,但性能可能会因大量数据而受到影响。
  • 聚合行:更具可扩展性性能方面,但如果聚合中可能存在重复项,则会受到限制。
  • 数据库兼容性:字符串处理技术可能需要特定于数据库的扩展。

以上是如何使用 JOIN 在 SQL 中选择同时具有'tag1”和'tag2”的用户?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板