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
Lepaskan: 2024-12-20 05:41:14
asal
218 orang telah melayarinya

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')
Salin selepas log masuk
  • 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') 
Salin selepas log masuk
  • 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'
Salin selepas log masuk

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
Salin selepas log masuk
  • 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 
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan