Saya ingin tahu, apakah ada cara yang baik untuk mencari semua kolom untuk nilai yang diberikan? Untuk tujuan saya, itu tidak perlu sama sekali cepat, itu hanya 1-off, dan saya benar-benar tidak ingin harus mengetikkan setiap nama bidang. Itulah tepatnya yang akan saya lakukan untuk saat ini, tetapi saya pikir pasti ada cara yang lebih baik.
Saya ingin mengubah ini:
SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val';
dalam hal ini:
SELECT * FROM table WHERE * = 'val'
... atau, bahkan lebih baik (meskipun saya sangat meragukannya ...)
SELECT * FROM table WHERE * like '%val%'
Saya menemukan ini , yang sepertinya agak tidak terlalu dekat, tapi saya tidak menemukan yang lebih dekat:
SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...)
Perbedaannya adalah, yang mencari pilihan kolom untuk nilai yang ditentukan, sedangkan saya mencoba mencari SEMUA kolom untuk nilai tunggal.
Itu tidak penting, seperti saya katakan lebih dari apa pun yang saya hanya ingin tahu
Semakin dekat Anda bisa dapatkan ini, menggunakan
IN
:Anda masih harus menulis semua kolom yang ingin Anda periksa.
Dan itu tidak ada bedanya dengan
OR
ekspresi yang Anda miliki, tidak dalam kinerja atau sebaliknya. Ini hanya cara yang berbeda dan setara untuk menulis ekspresi, dengan karakter yang sedikit lebih sedikit.sumber
Anda perlu melakukannya dalam dua langkah, pertama-tama hasilkan sql seperti (dengan asumsi tabel Anda bernama T dalam skema S:
Sekarang Anda dapat menjalankan string ini. Perhatikan bahwa Anda harus mengutip 'a' dengan ekstra '. Jika Anda memasukkan ini sebagai contoh prosedur, Anda bisa menyiapkan dan mengeksekusi string yang dihasilkan.
Saya diuji dengan:
Kueri yang dihasilkan di mana:
dan mengeksekusi yang menghasilkan:
sumber
Rasanya sudah setahun sejak saya menanyakan hal ini, tetapi saya hanya menemukan apa yang tampaknya menjadi hal yang saya cari! Ini bukan pernyataan SQL, seperti yang saya perkirakan, tetapi APA yang saya inginkan.
Di MySQL Workbench, Anda bisa mengklik kanan tabel atau skema, dan pilih Cari Tabel Data.
sumber
Coba yang ini:
Ini mengasumsikan bahwa tidak ada
.
dalam string pencarian Anda. Jika Anda tidak dapat menjamin hal itu, mungkin Anda dapat menggunakan "karakter pemisah" yang berbeda.sumber
%
atau_
kolom mana pun mengandung.
Solusi paling sederhana adalah melakukan
Kecuali jika val adalah sesuatu yang umum terjadi dalam sintaks sql.
sumber
Coba ini.
CONCAT () digunakan untuk memisahkan nilai kolom yang sama seperti di sini Anda dapat memisahkan kolom Anda dengan ruang untuk menentukan hasil yang lebih baik di dalam fungsi dan memeriksa nilai juga string yang dipisahkan dengan ruang dan hasilnya ada di tangan Anda.
sumber
Itu dimungkinkan dengan menggunakan database information_schema, pada dasarnya kami hanya akan mencantumkan semua kolom dari tabel tertentu kemudian menggunakan GROUP_CONCAT untuk mendaftar mereka sebagai satu baris kemudian memberi mereka dalam pernyataan IN.
Ini hanya akan mengembalikan satu baris jika 'nilai' ada di semua kolom.
sumber
if 'value' is present in any of the columns
? Selain itu, Anda dapat menambahkan predikat untuk tipe string seperti: `dan DATA_TYPE IN ('char', 'varchar')`where 'value' in ('col1,col2,col3…')
.