首頁 > 資料庫 > mysql教程 > 在 SQL 中連接表格時如何跨多行強制執行條件?

在 SQL 中連接表格時如何跨多行強制執行條件?

Barbara Streisand
發布: 2024-12-28 09:07:10
原創
862 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板