سؤال

وبالنظر إلى جدول البنود، جدول علامات والانضمام الجدول بينهما، ما هو وسيلة جيدة وفعالة لتنفيذ استفسارات النموذج:

وp1 AND p2 AND ... AND pn AND NOT n1 AND NOT n2 ... AND NOT nk

وأستخدمه SQL. لذلك للعثور على كافة العناصر التي تطابق كافة العلامات P1 ... السندات الإذنية وأيا من N1 ... ناغورني كاراباخ؟

هل هناك حل جيد "قياسي" لهذا؟

هل كانت مفيدة؟

المحلول

ولكن من الصعب القول من دون معرفة المخطط الخاص بك، ولكن شيئا من هذا القبيل العمل:

select article_id from articles
inner join tag t1 on t1.article_id=articles.article_id and t1.tag='included_tag'
inner join tag t2 on t2.article_id=articles.article_id and t2.tag='another_included_tag'
left outer join tag t3 on t3.article_id=articles.article_id and t3.tag='dont_include_tag'
left outer join tag t4 on t4.article_id=articles.article_id and t4.tag='also_dont_include_tag'
where t3.tag_id is null and t4.tag_id is null

والانضمام الداخلية إلى العلامات التي يجب تضمينها، والقيام مضاد للانضمام (صلة خارجية + حيث العمود المطلوب هو باطل) إلى العلامات التي لا ليتم تضمينها

نصائح أخرى

وأعتقد أن هذا هو ما كنت تبحث عن:

SELECT * FROM TABLE_NAME WHERE COLUMN1 IN ('value1','value2','value3') AND COLUMN1 NOT IN ('value4','value5','value6')

إذا لم يكن كذلك، اسمحوا لي أن أعرف. ربما أكون قد يساء فهمها سؤالك.

وذلك يعتمد على الطريقة التي كنت علامات تخزينها في قاعدة البيانات، ولكن ربما كنت ترغب المشغل IN:

SELECT tag FROM myTags WHERE tag IN ('p1','p2',...)
SELECT tag FROM myTags WHERE tag NOT IN ('p1','p2',...)
SELECT DISTINCT itemID FROM ItemsTags it, Tags t 
WHERE it.tagID = t.ID AND t.tag IN ('p1','p2','p3') AND t.tag NOT IN ('p4','p5','p6')
SELECT i.title
  FROM items i
 WHERE EXISTS(SELECT * FROM join_table j JOIN tags t ON t.id = j.tag_id WHERE j.item_id = i.id AND t.name = 'tag1')
   AND NOT EXISTS(SELECT * FROM join_table j JOIN tags t ON t.id = j.tag_id WHERE j.item_id = i.id AND t.name = 'tag2')
الخادم

وSQL يقوم بعمل جيد حول هذا البناء، ولكن أوراكل قد تحتاج بعض ملمحا إلى الحق في الحصول عليها (على الأقل فعلت قبل 5 سنوات).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top