首页 >数据库 >mysql教程 >在 SQL 中连接表时如何跨多行强制执行条件?

在 SQL 中连接表时如何跨多行强制执行条件?

Barbara Streisand
Barbara Streisand原创
2024-12-28 09:07:10944浏览

How to Enforce Conditions Across Multiple Rows When Joining Tables in SQL?

使用 SQL 在联接中跨多行强制执行条件

考虑到您关于在联接中跨多行强制执行条件的初始查询,让我们详细说明可用的技术。

测试不同行

1A。利用 EXISTS:

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')

1B。使用子查询:

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')

1C。利用 JOIN:

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'

聚合行

2A。使用 COUNT 次:

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

2B。使用字符串处理:

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

注意:此方法利用 MySQL 特定的扩展,与其他方法相比效率较低。

以上是在 SQL 中连接表时如何跨多行强制执行条件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn