Menggunakan Syarat pada Berbilang Baris dalam Gabungan menggunakan SQL
Apabila bekerja dengan cantuman, selalunya perlu menggunakan kriteria khusus pada berbilang baris dalam jadual bercantum. Ini boleh dicapai menggunakan pelbagai teknik yang melibatkan sama ada menguji baris individu atau mengagregatkan baris.
Menguji Baris Individu menggunakan EXISTS, Subqueries dan Joins
1A. WUJUD:
Kaedah ini membolehkan anda menyemak kewujudan baris yang memenuhi syarat tertentu.
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. Subqueries:
Subqueries juga boleh digunakan untuk memilih baris berdasarkan syarat dalam jadual bercantum.
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:
INNER JOIN boleh digunakan untuk menguji keadaan pada berbilang baris. Walau bagaimanapun, kebolehskalaan kaedah ini lebih rendah berbanding dengan yang lain.
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';
Mengagregatkan Baris menggunakan COUNT dan Pemprosesan Rentetan
2A. KIRAAN:
Teknik ini bergantung pada pengagregatan baris mengikut kiraan. Ia berkesan apabila teg tidak boleh digunakan beberapa kali pada pengguna yang sama.
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. Pemprosesan Rentetan:
Untuk pangkalan data yang menyediakan sambungan pemprosesan rentetan, seperti GROUP_CONCAT dan FIND_IN_SET, pemprosesan rentetan boleh digunakan untuk menyemak berbilang teg. Walau bagaimanapun, kaedah ini boleh menjadi tidak cekap.
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 Memohon Syarat pada Berbilang Baris dalam SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!