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 .