ฉันมีสองตารางเอกสารและป้ายกำกับ (ไม่ใช่กรณีจริงของฉัน ฉันใช้การเปรียบเทียบ) เอกสารหนึ่งฉบับสามารถมี N Labels ได้ เมื่อฉันต้องการเลือกเอกสารที่มีป้ายกำกับ ฉันสามารถทำสิ่งนี้ได้อย่างง่ายดาย
select D.id from document D
join label L on D.id = L.document_id
where L.value in('label1','label2',...)
จะเขียนแบบสอบถามที่ฉันต้องการเอกสารที่ไม่มีป้ายกำกับได้อย่างไร เมื่อฉันทำสิ่งนี้
select D.id from document D
join label L on D.id = L.document_id
where L.value not in('label1','label2',...)
แล้วมันใช้งานไม่ได้ เอกสารทั้งหมดที่มีป้ายกำกับมากกว่าหนึ่งป้ายซึ่งมีป้ายกำกับใดป้ายกำกับหนึ่งอยู่ในรายการจะถูกส่งกลับ เนื่องจากข้อมูลดิบที่มีการรวมกันของเอกสารและป้ายกำกับที่เหลือ (ไม่ใช่ป้ายกำกับที่แสดง) จะตรงกับเงื่อนไขที่ดังนั้นแบบสอบถามจึงส่งคืนเอกสารที่ฉันไม่ต้องการส่งคืน
จริงๆ แล้วฉันกำลังทำงานกับแบบสอบถามแบบนั้นในแบบสอบถามที่พิมพ์ Java Spring JPA ฉันจำเป็นต้องแก้ไขกรณีนี้สำหรับกรอบงานการกรองของฉัน แต่ฉันคิดว่าควรแก้ไขปัญหานี้ในระดับ SQL ก่อนจะดีกว่า
อย่างไรก็ตาม เราสามารถแทนที่ "not in" ด้วย "!=" เพื่อความเรียบง่ายได้ ปัญหายังคงเหมือนเดิม
มีแนวคิดสำหรับวิธีแก้ปัญหาง่ายๆ หรือไม่? ขอบคุณล่วงหน้า