Menggunakan Tuple dalam Klausa SQL IN: Alternatif kepada Penggabungan Rentetan
Dalam SQL, klausa IN membenarkan anda membandingkan medan dengan set daripada nilai. Walau bagaimanapun, pengendalian tupel yang mengandungi berbilang nilai boleh menimbulkan cabaran.
Masalahnya
Pertimbangkan jadual dengan medan group_id dan group_type, dan anda ingin menanyakan rekod dengan tupel tertentu pasangan, seperti:
SELECT * FROM mytable WHERE (group_id, group_type) IN (("1234-567", 2), ("4321-765", 3), ("1111-222", 5))
Penyelesaian yang dicadangkan untuk menggunakan penggabungan rentetan, seperti di bawah, adalah tidak cekap untuk jadual besar:
SELECT * FROM mytable WHERE group_id + STR(group_type, 1) IN ("1234-5672", "4321-7653", "1111-2225")
Penyelesaian SQL Standard
Penyelesaian yang lebih cekap ialah menggunakan sintaks Standard SQL-92 untuk tupel dalam klausa IN dengan kata kunci VALUES:
SELECT * FROM mytable WHERE (group_id, group_type) IN ( VALUES ('1234-567', 2), ('4321-765', 3), ('1111-222', 5) );
Sintaks ini disokong oleh beberapa produk SQL, termasuk PostgreSQL dan SQLite.
Microsoft SQL Server Note
Pada masa penulisan (SQL Server 2022), sintaks ini tidak disokong dalam Microsoft SQL Server.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Secara Cekap untuk Pasangan Tuple dalam Klausa IN SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!