Apakah ada cara untuk hanya SELECT
baris dengan data tertentu dalam kolom, tanpa menggunakan WHERE
?
mis. Jika saya punya ini:
SELECT * FROM Users
WHERE town = 'Townsville'
apakah ada cara untuk mengimplementasikan WHERE
klausa ke dalam SELECT
pernyataan?
sesuatu seperti
SELECT *, town('Townsville') FROM Users
Ini pertanyaan aneh tapi itu pertanyaan yang pernah saya tanyakan dari teman-teman saya
sql-server
Josh Stevenson
sumber
sumber
Jawaban:
Tidak yakin apakah ini jenis hal gila yang Anda cari ....
Penafian : Saya sama sekali tidak tahu mengapa Anda ingin menggunakan ini.
sumber
Data
Solusi alternatif
Mempertahankan duplikat
Keluaran:
Untuk contoh terakhir:
Coba di sini: Stack Exchange Data Explorer
sumber
GROUP BY
solusinya, Anda juga bisa menambahkan PK dalam grup dengan daftar (agar 100% yakin bahwa kueri mengembalikan jumlah baris yang sama dengan WHERE). Dengan asumsi tentu saja ada PK;)Cara lain.
( Repurposing contoh data Paul White )
sumber
"Hanya untuk bersenang-senang" Anda dapat menggunakan
order by
dengantop(1) with ties
Ini akan memesan semua baris dengan
Townsville
terlebih dahulu sejak kasing kembali1
jikatown = 'Townsville'
. Semua baris lain akan2
dikembalikan oleh kasing.The
with ties
klausul membuat query mengembalikan semua baris yang adalah "dasi" untuk tempat terakhir di baris kembali. Menggunakantop(1)
kombinasi denganwith ties
kemudian akan mengembalikan semua baris yang memiliki nilai yang sama dengan baris pertama dalam ekspresi yang digunakan dalam urutan oleh klausa.Perhatikan, sebagaimana Martin Smith tunjukkan dalam komentar, itu akan mengembalikan semua baris jika Anda meminta kota yang tidak ada dalam tabel.
Jika Anda tidak takut pada hal-hal XML dari database Anda bisa menggunakan predikat dalam fungsi nodes ().
Meminjam pengaturan dari Paul White.
Versi lain dengan
top
danorder by
yang benar-benar berfungsi saat mencari kota yang tidak ada.sumber
Anda memiliki dua hal berbeda di sini.
Akan membatasi jumlah baris yang Anda dapatkan kembali hanya di tempat kota =
Townsville
Akan melewati literal
Townsville
ke fungsi yang disebuttown
. Itu tidak akan membatasi baris yang dikembalikan oleh permintaan dan pada kenyataannya jika fungsi mengembalikan apa pun kecuali nilai tunggal Anda akan mendapatkan kesalahan.Ada cara lain untuk membatasi jumlah baris yang Anda dapatkan kembali dari kueri. Klausa HAVING misalnya. Tetapi memiliki beberapa persyaratan lain.
Atau INNER GABUNG meskipun yang ini agak aneh jika Anda tidak memiliki meja kedua.
sumber
Berikut adalah contoh menggunakan ekspresi tabel umum (CTE).
sumber
Anda bisa melakukan ini:
Sebenarnya Anda tidak menggunakan klausa WHERE
sumber
Berikut ini adalah cara yang sepenuhnya logis
bodohuntuk melakukannya yang belum saya lihat ....Saya tidak bisa membayangkan mengapa ini bukan hal pertama yang disarankan. :)
sumber
Semua kota selain Townsville akan menjadi nol. Masalah terpecahkan.
sumber