Saya mendapatkan kesalahan ini

Kesalahan saat menjalankan kueri SQL pada basis data X: nilai baris disalahgunakan

Untuk pola kueri berikut:

SELECT *
FROM some_table
WHERE (field1, field2) IN (('a', 'b'), ('c', 'd'))

Ada petunjuk tentang apa yang salah?

1
SkyWalker 12 Mei 2021, 23:01

1 menjawab

Jawaban Terbaik

Dari Perbandingan Nilai Baris:

Untuk operator IN nilai baris, ruas kiri (selanjutnya disebut "LHS") dapat menjadi daftar nilai yang dikurung atau subkueri dengan banyak kolom. Tetapi sisi kanan (selanjutnya disebut "RHS") harus berupa subquery ekspresi.

Dalam kasus Anda (('a', 'b'), ('c', 'd')) bukan ekspresi subquery.

Yang dapat Anda lakukan adalah membuat CTE yang mengembalikan nilai baris dalam tanda kurung dan menggunakan subkueri yang memilih dari CTE tersebut:

WITH cte(field1, field2) AS (VALUES ('a', 'b'), ('c', 'd'))
SELECT *
FROM some_table
WHERE (field1, field2) IN (SELECT field1, field2 FROM cte)

Atau lebih sederhana:

WITH cte(field1, field2) AS (VALUES ('a', 'b'), ('c', 'd'))
SELECT *
FROM some_table
WHERE (field1, field2) IN cte

Lihat demo yang disederhanakan.

1
forpas 12 Mei 2021, 20:19