Menggunakan SQL versi Microsoft , inilah kueri sederhana saya. Jika saya meminta catatan yang tidak ada maka saya tidak akan mendapatkan apa pun yang dikembalikan. Saya lebih suka bahwa false (0) dikembalikan dalam skenario itu. Mencari metode paling sederhana untuk memperhitungkan tidak ada catatan.
SELECT CASE
WHEN S.Id IS NOT NULL AND S.Status = 1 AND (S.WebUserId = @WebUserId OR S.AllowUploads = 1) THEN 1
ELSE 0
END AS [Value]
FROM Sites S
WHERE S.Id = @SiteId
Ini mirip dengan Adam Robinson, tetapi menggunakan ISNULL, bukan COUNT.
Jika kueri dalam memiliki baris yang cocok, maka 1 dikembalikan. Query luar (dengan ISNULL) kemudian mengembalikan nilai 1. Jika query dalam tidak memiliki baris yang cocok, maka ia tidak mengembalikan apapun. Kueri luar memperlakukan ini seperti NULL, sehingga ISNULL akhirnya mengembalikan 0.
sumber
Ini mungkin kuda mati, cara lain untuk mengembalikan 1 baris ketika tidak ada baris adalah dengan UNION kueri lain dan menampilkan hasil ketika tidak ada dalam tabel.
sumber
SELECT 0
), lalu saya melakukanSUM
penyatuan. Sederhana dan mudah diikuti.Sesuatu seperti:
sumber
select 1
danselect 2
saya menambahkanas <colName>
Saya membaca semua jawabannya di sini, dan butuh beberapa saat untuk mencari tahu apa yang sedang terjadi. Berikut jawaban dari Moe Sisko dan beberapa penelitian terkait
Jika kueri SQL Anda tidak mengembalikan data apa pun, tidak ada bidang dengan nilai null sehingga baik ISNULL maupun COALESCE tidak akan berfungsi seperti yang Anda inginkan. Dengan menggunakan sub-kueri, kueri tingkat atas mendapatkan bidang dengan nilai null, dan ISNULL dan COALESCE akan bekerja seperti yang Anda inginkan / harapkan.
Kueri saya
Pertanyaan saya dengan komentar
sumber
Anda hanya perlu mengganti WHERE dengan LEFT JOIN:
Solusi ini memungkinkan Anda untuk mengembalikan nilai default untuk setiap kolom juga, misalnya:
sumber
Tidak ada catatan yang cocok berarti tidak ada catatan yang dikembalikan. Tidak ada tempat untuk "nilai" dari 0 jika tidak ada record yang ditemukan. Anda dapat membuat kueri UNION gila untuk melakukan apa yang Anda inginkan, tetapi jauh lebih baik hanya dengan memeriksa jumlah rekaman dalam kumpulan hasil.
sumber
Ini mungkin salah satu cara.
sumber
Bagaimana dengan WITH TIES?
sumber
sumber
Jawaban @ hai-phan
LEFT JOIN
adalah kuncinya, tetapi mungkin agak sulit untuk diikuti. Saya memiliki pertanyaan rumit yang mungkin juga tidak menghasilkan apa-apa. Saya baru saja menyederhanakan jawabannya dengan kebutuhan saya. Mudah diterapkan ke kueri dengan banyak kolom.sumber
sumber