Mysql null aman tidak sama

Dalam SQL _______ 45 _______ tidak sama (_______ 46 _______) dengan apa pun — bahkan dengan null lainnya. Menurut logika tiga nilai SQL, hasil dari null = null tidak benar tetapi tidak diketahui. SQL memiliki predikat is [not] null untuk menguji apakah nilai tertentu adalah null

Dengan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 01 SQL juga menyediakan operator perbandingan yang memperlakukan dua nilai null sebagai sama

<expression> IS NOT DISTINCT FROM <expression>_

Perhatikan bahwa Anda harus menggunakan bentuk negasi dengan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 03 untuk sampai pada logika yang mirip dengan operator yang sama dengan (=)

Tabel kebenaran berikut menyoroti perbedaan antara tanda sama dengan (=) dan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06

CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 07CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 08CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 09EXISTS (VALUES (A) INTERSECT VALUES (B) )0EXISTS (VALUES (A) INTERSECT VALUES (B) )1EXISTS (VALUES (A) INTERSECT VALUES (B) )1truetrueEXISTS (VALUES (A) INTERSECT VALUES (B) )1EXISTS (VALUES (A) INTERSECT VALUES (B) )4falsefalseEXISTS (VALUES (A) INTERSECT VALUES (B) )1nullunknownfalsenullnullunknowntrue

Hasil dengan persamaan (=_) tidak diketahui jika salah satu operatornya adalah null. Perbandingan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06 benar jika kedua nilai null atau salah jika hanya satu yang null

Alternatif yang Sesuai

Catatan

Meskipun ada alternatif standar untuk CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06, menggunakan a seringkali merupakan pilihan yang lebih baik

Karena logika tiga nilai SQL, pengganti yang sepenuhnya setara untuk EXISTS (SELECT c1 INTERSECT SELECT c2 )5 yang berfungsi di semua basis data SQL ternyata sangat rumit—bahkan ketika kami membatasi persyaratan untuk kasus di mana evaluasi ekspresi CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 07 dan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 08 bersifat deterministik dan tidak memiliki efek samping

CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 0

Hasil ekspresi dalam klausa EXISTS (SELECT c1 INTERSECT SELECT c2 )8 benar jika kedua argumen sama atau keduanya null. Jika hanya satu argumen null hasilnya tidak diketahui, tidak salah. Ini seringkali tidak menjadi masalah karena seperti menerima atau menolak baris untuk klausa DECODE(A, B, 0, 1) = 01

Untuk mendapatkan fungsionalitas yang sepenuhnya setara dari CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06—i. e. benar atau salah tetapi tidak pernah diketahui—ekspresi DECODE(A, B, 0, 1) = 03 mereduksi hasil tiga nilai menjadi hasil dua nilai. Dalam beberapa basis data DECODE(A, B, 0, 1) = 0_4 dapat digunakan sebagai pengganti ekspresi DECODE(A, B, 0, 1) = 03. Teknik ini dijelaskan dalam

Atas Nama Saya Sendiri

Saya mencari nafkah dari pelatihan SQL, penyetelan dan konsultasi SQL, dan buku saya "Penjelasan Kinerja SQL". Pelajari lebih lanjut di https. // menang dan. pada/

Pilihan lain adalah menggunakan. Cuplikan berikut menggunakan DECODE(A, B, 0, 1) = 0_6 untuk menentukan subkumpulan umum. Dua set yang dibandingkan masing-masing hanya satu nilai (satu baris dengan satu kolom). Jika nilainya dua kali lipat, subset umum akan menjadi nilai itu. Kalau tidak, subset umum kosong. Logika ini dapat dengan mudah diuji dalam klausa ________20______1 dengan predikat DECODE(A, B, 0, 1) = 08

EXISTS (VALUES (A) INTERSECT VALUES (B) )

Ini memiliki keuntungan karena tidak mengulangi ekspresi apa pun. Sayangnya, ini tidak berfungsi di semua database karena penggunaan klausa DECODE(A, B, 0, 1) = 09. Pilih dari tabel dummy satu baris dapat digunakan untuk mendapatkan solusi yang sesuai dan didukung secara luas

Kesesuaian

Predikat CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 01 diperkenalkan dalam dua langkah. SQL. 1999 menambahkan T151, “predikat BERBEDA”. Negasi opsional dengan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 03 ditambahkan oleh SQL. 2003 sebagai fitur T152, “DISTINCT predikat dengan negasi”

BigQueryDb2 (LUW)aaMariaDBMySQLOracle DBPostgreSQLSQL ServerSQLiteberbeda daritidak berbeda dariUsingcasedandis nullMenggunakanintersect,values,exists
  1. Tersedia dalam 11. 1 Paket Mod 1/Perbaiki Paket 1

Alternatif Kepemilikan

Sebagian besar database yang tidak menawarkan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 0_6 menawarkan alternatif eksklusif yang lebih nyaman daripada yang dijelaskan di atas. Fitur berpemilik berikut sepenuhnya kompatibel—i. e. mereka memiliki hasil dua nilai dan tidak pernah kembali tidak diketahui

BigQueryDb2 (LUW)MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLiteintersect,selectw/ofromdecode(A, B, 0, 1) = 0A is BA B

null3, null4 tanpa null5, DECODE(A, B, 0, 1) = 06

Solusi standar menggunakan DECODE(A, B, 0, 1) = 08, DECODE(A, B, 0, 1) = 09, dan DECODE(A, B, 0, 1) = 06 dapat dengan mudah dimodifikasi untuk bekerja pada lebih banyak database dengan menggunakan null4 tanpa null5 alih-alih klausa DECODE(A, B, 0, 1) = 09

EXISTS (SELECT c1 INTERSECT SELECT c2 )

dekode — Db2, Oracle, H2

Db2, database Oracle, dan H2 memiliki fungsi kepemilikan =3 yang kebetulan menggunakan semantik CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06 secara internal. Contoh berikut memiliki efek yang sama dengan EXISTS (SELECT c1 INTERSECT SELECT c2 )5

DECODE(A, B, 0, 1) = 0

=6 — SQLite, H2

Operator =_6 dari SQLite () dan H2 () dapat membandingkan dua ekspresi (bukan hanya is [not] null), dan memiliki semantik yang sama dengan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06

null0 — MySQL, MariaDB

yang bekerja seperti CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06

null3 — SQL Server

Pengaturan ANSI_NULLS yang tidak digunakan lagi dari SQL Server membuat beberapa perbandingan yang sama (=) bertindak seolah-olah itu adalah perbandingan CASE WHEN (a = b) or (a IS NULL AND b IS NULL) THEN 0 ELSE 1 END = 06

Peringatan

null6 sudah tidak digunakan lagi. penggunaannya dapat menyebabkan kesalahan dalam versi SQL Server yang akan datang

Perhatikan juga bahwa ini tidak memengaruhi semua tanda sama dengan, tetapi hanya tanda yang satu sisi perbandingannya adalah variabel atau literal null. Itu tidak memengaruhi perbandingan ________45______8 umum

Tidak sama dengan NULL di MySQL?

MySQL Tidak Sama dengan Null . if the query returns a NOT NULL value, the condition will equate to TRUE.

Dapatkah saya menggunakan. = Di MySQL?

Di MySQL, Anda dapat menggunakan atau. = operator untuk menguji ketidaksetaraan dalam kueri . Misalnya, kita dapat menguji ketimpangan menggunakan operator , sebagai berikut. PILIH * DARI kontak WHERE last_name 'Johnson';

Bagaimana Anda menggunakan tidak sama dengan NULL?

NULL tidak memiliki nilai, sehingga tidak dapat dibandingkan menggunakan operator nilai skalar . Dengan kata lain, tidak ada nilai yang sama dengan (atau tidak sama dengan) NULL karena NULL tidak memiliki nilai.

Apa. = Berarti di MySQL?

tidak sama dengan (,. =) operator. MySQL Not equal digunakan untuk mengembalikan satu set baris (dari tabel) setelah memastikan bahwa dua ekspresi ditempatkan di kedua sisi operator NOT EQUAL TO () tidak sama. Sintaksis. ,. = Versi MySQL. 5. 6.

Postingan terbaru

LIHAT SEMUA