"IN" ning noto'g'ri ishlatilishi

I IN buyruqni ishlatib, bir sohada barcha satrlarni topishga harakat qilaman, lekin ba'zi natijalarni bilsam, biron bir natijani bermayapman. Sizga ko'rsatilishning eng yaxshi usuli misol:

mysql> SELECT detail_sections FROM inet_staff_details WHERE detail_sections !='';
+-----------------+
| detail_sections |
+-----------------+
| 10,11           |
| 10,11           |
| 10,11           |
| 10,11           |
+-----------------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM inet_staff_details WHERE 11 IN (detail_sections);
Empty set, 4 warnings (0.00 sec)

mysql> SELECT * FROM inet_staff_details WHERE '11' IN (detail_sections);
Empty set (0.00 sec)

Ko'rib turganingizdek, 11 raqami vergul bilan ajratilgan ro'yxatda, lekin natijada ko'rsatilmaydi. Iltimos, men noto'g'ri qilayotganimni maslahat bera olasizmi?

Cheers.

0

5 javoblar

Ushbu so'rovni ko'ring -

SELECT * FROM inet_staff_details WHERE FIND_IN_SET(10, detail_sections);

FIND_IN_SET funktsiyasi.

4
qo'shib qo'ydi
Juda ko'p rahmat, bu juda yaxshi ish qildi.
qo'shib qo'ydi muallif scampbell, manba

IN ning ko'rsatilgan qiymati (bu holda 11 ) belgilangan qiymatiga teng bo'lgan ustunlikda (bu holda detail_sections ) biron bir qiymat yoki yo'qligini ko'rishdir.

Kerakli qiymatlarni olish uchun LIKE dan foydalaning. Foydalanuvchining profili ya'ni,

SELECT * FROM inet_staff_details 
WHERE detail_sections LIKE '11,%'
   OR detail_sections LIKE '%,11' 
   OR detail_sections LIKE '%,11,%' 
   OR detail_sections = '11';
2
qo'shib qo'ydi
-1, chunki bu 113, 411, 51124 va boshqalarni tanlash imkonini beradi
qo'shib qo'ydi muallif Brian, manba
@Brian haqiqat, lekin bu misol. So'rovlar har qanday tarzda qiymatlarga asoslangan holda o'zgartirilishi kerak, ammo ha, so'rovni o'zgartirishingiz mumkin 113, 411, 51124, va hokazo.
qo'shib qo'ydi muallif Jan S, manba

Ha, bu erda siz uchun ishlamaydi. IN, bu erda mavjud bo'lgan narsalarga asoslangan substringlarni emas, balki to'liq qiymatlarni tanlash uchun mo'ljallangan. Muammo shundaki, bu aniq 11 qiymat kabi muayyan qadriyatlarni qidirishga imkon beradigan bazaviy nuqsonli ma'lumotlar bazasi dizayni.

Tanlovlaringiz bor

(a) uni biroz o'zgartiring (ma'lumotlar bazalarini normallashtirish va jadvalga qo'shilish haqida o'qing) yoki

(b) search where: detail_sections = '11' or detail_sectoins LIKE '11,%' or detail_sections LIKE '%,11,%' or detail_sections LIKE '%,11'

1
qo'shib qo'ydi
Eng yaxshi dizayni emas, balki uni qabul qil. Men allaqachon oylardagidek nimani o'ylayotganimni bilmayman, ammo tezroq tuzilgan rejimni bajarishim uchun tezda tuzatish kerak bo'ladi!
qo'shib qo'ydi muallif scampbell, manba

Shunga o'xshash narsa:

   select * from inet_staff_details 
   where instr(concat(',', detail_sections, ','), ',11,') > 0
0
qo'shib qo'ydi

Buni ko'ring:

SELECT * FROM inet_staff_details 
WHERE detail_sections LIKE '%,11,%'
OR detail_sections LIKE '%,11'
OR detail_sections LIKE '11,%'
OR detail_sections = '11'
0
qo'shib qo'ydi