Ini adalah contoh lain dari pentingnya menormalkan data Anda.
Menyimpan beberapa titik data dalam satu kolom hampir tidak pernah merupakan desain yang benar, dan maksud saya hampir tidak pernah sekitar 99,9999%.
Jika Anda tidak dapat menormalkan database Anda, Anda dapat menggunakan solusi seperti ini:
SELECT *
FROM Projects p
WHERE EXISTS (
SELECT Project_ID
FROM Feedback F WHERE ID = 268
AND Project_ID IS NOT NULL
AND ';'+ F.Project_ID +';' LIKE '%;'+ CAST(p.Project_ID as varchar) +';%'
)
Anda tidak dapat menggunakan IN
operator karena mengharapkan daftar nilai yang dibatasi oleh koma, sementara Anda mencoba menyediakannya dengan satu nilai yang dibatasi oleh titik koma. Bahkan jika nilai dalam Project_ID dibatasi oleh koma, itu tetap tidak akan berfungsi.
Alasan saya menambahkan ;
di setiap sisi Project_ID
di kedua tabel adalah dengan cara ini LIKE
operator akan mengembalikan true
untuk lokasi mana pun ia menemukan Projects.Project_Id
di dalam Feedback.Project_Id
. Anda harus menambahkan ;
ke Projects.Project_Id
untuk mencegah LIKE
untuk mengembalikan true
ketika Anda mencari angka yang sebagian cocok dengan angka dalam string yang dibatasi. Pertimbangkan untuk mencari 12 dalam string yang berisi 1;112;455 - tanpa menambahkan pembatas ke nilai pencarian (12 dalam contoh ini) LIKE
operator akan mengembalikan true
.