Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Pengguna dengan Berbilang Tag Menggunakan SQL Joins?

Bagaimana untuk Memilih Pengguna dengan Berbilang Tag Menggunakan SQL Joins?

DDD
DDDasal
2024-12-20 05:41:14219semak imbas

How to Select Users with Multiple Tags Using SQL Joins?

Cara Melaksanakan Syarat SQL pada Berbilang Baris dalam Gabungan

Isu yang dibentangkan berkisar tentang memilih pengguna yang memiliki dua teg khusus daripada gabungan operasi. Walaupun contoh yang diberikan menggunakan IN mengembalikan pengguna dengan sama ada teg, hasil yang diinginkan adalah untuk mendapatkan semula pengguna yang memiliki kedua-dua teg. Untuk mencapai matlamat ini, memanfaatkan SEMUA kata kunci adalah tidak sesuai.

Penyelesaian

1. Menguji Baris Berbeza

  • WUJUD Subkueri: Semak kewujudan baris padanan keadaan dalam berbilang baris.
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')
  • Sub-pertanyaan: Pilih pengguna yang sepadan dengan keadaan dalam berbilang baris.
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') 
  • SERTAI: Buat berbilang cantuman untuk setiap syarat teg.
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. Mengagregatkan Baris

  • COUNT (Memerlukan Perlindungan Data): Kira baris agregat untuk memastikan kehadiran kedua-dua teg.
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
  • Pemprosesan Rentetan (Khusus Pangkalan Data): Gabungkan nama teg dan semak kehadiran teg tertentu menggunakan fungsi khusus pangkalan data.
(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 

Atas ialah kandungan terperinci Bagaimana untuk Memilih Pengguna dengan Berbilang Tag Menggunakan SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn