Pertanyaan Adakah yang bisa menjelaskan mengapa NULL digunakan dalam query ini?


Juga apa yang akan menjadi skenario di mana permintaan ini digunakan

select * from TableA where exists  
    (select null from TableB where TableB.Col1=TableA.Col1)

4
2018-03-24 10:54


asal


Jawaban:


Kondisi EXISTS dianggap "harus dipenuhi" jika subquery mengembalikan setidaknya satu baris.

Sintaks untuk kondisi EXISTS adalah:

PILIH kolom DARI tabel DI MANA ADA (subquery);

Harap dicatat bahwa "Pilih Null dari mytable" akan mengembalikan jumlah baris dalam mytable tetapi semua hanya akan berisi satu kolom dengan null di dalam sel karena persyaratan permintaan luar hanya untuk memeriksa apakah ada baris yang jatuh dalam kondisi yang diberikan seperti di huruf "TableB.Col1 = TableA.Col1"

Anda dapat mengubah nol ke 1, 0 atau nama kolom yang tersedia di tabel. 1/0 mungkin bukan ide yang bagus :)


4
2018-03-24 11:34



Karena kueri sudah ada, Anda dapat mengembalikan apa pun. Itu bahkan tidak dievaluasi.

Bahkan, Anda dapat mengganti null dengan (1/0) dan itu bahkan tidak akan menghasilkan pembagian dengan nol kesalahan.


9
2018-03-24 10:56



Itu NULL tidak masuk akal. Ini hanya buruk SQL.

Itu exists klausa seharusnya digunakan SELECT *.

Orang-orang mengarang cerita tentang biaya SELECT *. Mereka mengklaim itu melakukan kueri metadata "ekstra". Tidak. Mereka mengklaim itu adalah "ekspansi makro" dan membutuhkan banyak waktu ekstra parse. Tidak.


5
2018-03-24 10:57



Ini cara yang norak untuk memilih semua catatan di TableA, yang memiliki catatan yang cocok (Col1 = Col1) di TableB. Mereka mungkin sama-sama memilih '1', atau '*', misalnya.

Cara yang lebih bisa dibaca manusia untuk mencapai hal yang sama

SELECT * FROM TableA WHERE Col1 IN ( SELECT Col1 IN TableB )

3
2018-03-24 10:59



Tolong, tolong, semuanya ....

EXISTS mengembalikan BOOLEAN mis. TRUE atau FALSE. Jika hasil yang ditetapkan tidak kosong maka kembalikan TRUE. Korelasi dari sub-query adalah penting seperti dalam kasus di atas.

Berikan saya semua baris di A di mana SETIDAKNYA satu col1 ada di B.

Tidak masalah apa yang ada di daftar pilih. Itu hanya masalah gaya.


1
2018-03-24 11:40