Bisakah saya menggunakan fungsi CONTAINS () (sql) untuk melakukan pemeriksaan yang sama?
Kate
Jawaban:
291
Bidang apa ini? Operator IN tidak dapat digunakan dengan bidang tunggal, tetapi dimaksudkan untuk digunakan dalam subqueries atau dengan daftar yang telah ditentukan:
-- subquerySELECT a FROM x WHERE x.b NOTIN(SELECT b FROM y);-- predefined listSELECT a FROM x WHERE x.b NOTIN(1,2,3,6);
Jika Anda mencari sebuah string, pilih operator LIKE (tetapi ini akan lambat):
-- Finds all rows where a does not contain "text"SELECT*FROM x WHERE x.a NOTLIKE'%text%';
Jika Anda membatasi sehingga string yang Anda cari harus dimulai dengan string yang diberikan, itu dapat menggunakan indeks (jika ada indeks pada bidang itu) dan cukup cepat:
-- Finds all rows where a does not start with "text"SELECT*FROM x WHERE x.a NOTLIKE'text%';
apa itu xb? surat-suratmu sangat membingungkan. Saya sarankan menggunakan tabel atau bidang.
Whitecat
Pastikan bahwa jika Anda menggunakan subquery untuk NOT INitu tidak ada nilai yang akan NULL, karena NOT IN dan NULL tidak digabungkan dengan cara yang jelas jika Anda tidak terbiasa dengan logika tiga nilai. Di sini Anda akan menggunakan SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Jika Anda juga perlu mengecualikan nilai NULL, Anda harus melakukan ini:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
Bacon Bits
17
SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Pastikan Anda melarikan diri $ x dengan benar sebelumnya untuk menghindari injeksi SQL)
Sunting: NOT INmelakukan sesuatu yang sedikit berbeda - pertanyaan Anda tidak sepenuhnya jelas jadi pilih yang mana yang akan digunakan. LIKE 'xxx%'dapat menggunakan indeks. LIKE '%xxx'atau LIKE '%xxx%'tidak bisa.
Apa yang dianggap lolos dengan benar? Saya tahu bahwa dengan string normal Anda hanya perlu melarikan diri dari beberapa hal, tetapi LIKE memiliki beberapa karakter khusus.
Jawaban:
Bidang apa ini? Operator IN tidak dapat digunakan dengan bidang tunggal, tetapi dimaksudkan untuk digunakan dalam subqueries atau dengan daftar yang telah ditentukan:
Jika Anda mencari sebuah string, pilih operator LIKE (tetapi ini akan lambat):
Jika Anda membatasi sehingga string yang Anda cari harus dimulai dengan string yang diberikan, itu dapat menggunakan indeks (jika ada indeks pada bidang itu) dan cukup cepat:
sumber
NOT IN
itu tidak ada nilai yang akan NULL, karena NOT IN dan NULL tidak digabungkan dengan cara yang jelas jika Anda tidak terbiasa dengan logika tiga nilai. Di sini Anda akan menggunakanSELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL);
Jika Anda juga perlu mengecualikan nilai NULL, Anda harus melakukan ini:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';
(Pastikan Anda melarikan diri $ x dengan benar sebelumnya untuk menghindari injeksi SQL)Sunting:
NOT IN
melakukan sesuatu yang sedikit berbeda - pertanyaan Anda tidak sepenuhnya jelas jadi pilih yang mana yang akan digunakan.LIKE 'xxx%'
dapat menggunakan indeks.LIKE '%xxx'
atauLIKE '%xxx%'
tidak bisa.sumber