首頁 >資料庫 >mysql教程 >如何使用 JOIN 在 SQL 中選擇同時具有「tag1」和「tag2」的使用者?

如何使用 JOIN 在 SQL 中選擇同時具有「tag1」和「tag2」的使用者?

DDD
DDD原創
2024-12-28 02:08:09810瀏覽

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'

C.連接:

C.連接:

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

C.連接:

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 

C.連接:

  • C.連接>2。聚合行
  • A.計數:
  • B.字串處理:
注意事項測試單行:適合小型資料集,但效能可能會因大量資料而受到影響。 聚合行:更具可擴展性效能方面,但如果聚合中可能存在重複項,則會受到限制。 資料庫相容性:字串處理技術可能需要特定於資料庫的擴充。

以上是如何使用 JOIN 在 SQL 中選擇同時具有「tag1」和「tag2」的使用者?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn