كيفية كتابة استعلام عودته السجلات غير اختيار،

StackOverflow https://stackoverflow.com/questions/1616969

  •  06-07-2019
  •  | 
  •  

سؤال

وكنت قد كتبت اختبار التطبيق النفسي، حيث يتم تقديم المستخدم مع قائمة من الكلمات، وق / لديه لاختيار عشرة الكلمات التي <م> كثيرا وصف نفسه، ثم اختيار الكلمات التي جزئيا وصف نفسه، والكلمات التي لا تصف نفسه. التطبيق نفسه يعمل بشكل جيد، لكنني كنت مهتمة باستكشاف الاحتمالات البيانات الفوقية: تم في معظم الأحيان اختيار الكلمات التي في الفئة الأولى، ولم تم اختيار الكلمات التي في الفئة الأولى. كان الاستعلام الأول ليست مشكلة، ولكن الثانية (التي لم تم اختيار الكلمات) يترك لي متعكز.

وهيكل الجدول كما يلي:

table words: id, name
table choices: pid (person id), wid (word id), class (value between 1-6)

ويفترض أن الجواب ينطوي على اليسار الانضمام بين الكلمات والخيارات، ولكن يجب أن يكون هناك بيان المعدلة - حيث choices.class = 1 - وهذا يسبب لي مشاكل. كتابة شيء من هذا القبيل

select words.name
from words left join choices
on words.id = choices.wid
where choices.class = 1
and choices.pid = null

ويسبب مدير قاعدة بيانات للذهاب في رحلة طويلة إلى أي مكان. أنا أستخدم دلفي 7 و Firebird 1.5.

وTIA، No'am

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

المحلول

وربما هذا هو أسرع قليلا:

SELECT w.name
FROM words w
WHERE NOT EXISTS
   (SELECT 1
    FROM choices c 
    WHERE c.class = 1 and c.wid = w.id)

نصائح أخرى

وشيء من هذا القبيل يجب أن تفعل خدعة:

SELECT name
FROM words
WHERE id NOT IN
   (SELECT DISTINCT wid   -- DISTINCT is actually redundant
    FROM choices 
    WHERE class == 1)
SELECT words.name
FROM
    words
    LEFT JOIN choices ON words.id = choices.wid AND choices.class = 1
WHERE choices.pid IS NULL

تأكد من لديك فهرس على choices (class, wid).

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