ฉันมี 2 ตารางในฐานข้อมูลของฉัน หนึ่งคือสำหรับการสั่งซื้อและอีกรายการสำหรับ บริษัท
คำสั่งซื้อมีโครงสร้างดังนี้
OrderID | attachedCompanyIDs
------------------------------------
1 1,2,3
2 2,4
และ บริษัท มีโครงสร้างนี้:
CompanyID | name
--------------------------------------
1 Company 1
2 Another Company
3 StackOverflow
4 Nothing
หากต้องการทราบชื่อ บริษัท ของคำสั่งซื้อฉันสามารถสอบถามได้ดังนี้:
SELECT name FROM orders,company
WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)
แบบสอบถามนั้นทำงานได้ดี แต่แบบสอบถามต่อไปนี้ใช้ไม่ได้
SELECT name FROM orders,company
WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
เหตุใดแบบสอบถามแรกจึงใช้งานได้ แต่ไม่ใช่แบบสอบถามที่สอง
แบบสอบถามแรกส่งกลับ:
name
---------------
Company 1
Another Company
StackOverflow
แบบสอบถามที่สองส่งกลับเท่านั้น:
name
---------------
Company 1
เหตุใดจึงเป็นเช่นนี้เหตุใดแบบสอบถามแรกจึงส่งคืน บริษัท ทั้งหมด แต่แบบสอบถามที่สองส่งคืนเฉพาะคำค้นหาแรกเท่านั้น