سؤال

أحاول استخدام قيمة حقل آخر داخل في.

SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (1,2,3)
GROUP BY types.id

ويعمل

SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (auth_users.types)
GROUP BY types.id

لا يعمل

http://pastebin.com/m76a0596. مزيد من المعلومات يمكن العثور عليها هنا

auth_users.types = 1,2,3
هل كانت مفيدة؟

المحلول

تحتاج إلى استخدام FIND_IN_SET - انظر هذا السؤال: MySQL: حدد عبارة باستخدام المشغل

نصائح أخرى

لسوء الحظ، IN (...) لن تحاول تحليل قيمة حقل varchar لاستخراج القيم التي تريد مطابقتها ضدها.

انها أساسا فقط يتحقق إذا "أنواع" هي واحدة من "1، 2، 3" (أي. ليس 1، 2 أو 3، ولكن القيمة الفردية الفعلية "1، 2، 3".)

طريقة واحدة لحل هذا سيكون لديك وظيفة في قاعدة البيانات التي ترجع النتائج، ويأخذ ذلك قيمة varchar، ويقعها، وإرجاع 3 صفوف على سبيل المثال.

بخلاف ذلك، تحتاج إلى إعادة كتابة إما لاستخدامها مثل (والتي ستؤدي بشكل فظيع)، أو تحتاج إلى تحليل تلك القيم نفسك وتضع النتيجة في SQL مباشرة.

يحاول يسدد الصف:

 SELECT column1,column2,column3
   FROM t1
   WHERE (column1,column2,column3) IN
         (SELECT column1,column2,column3 FROM t2);

تعديل:

في الواقع، النظر في Pastebin الخاص بك، هل تخزن "1،2،3" في صف واحد مثل varchar؟ هذا لن يعمل.

أعتقد أنه يبحث عن انضمام بسيط

غادر الانضمام إلى Auth_users على أنواع .id = auth_users.types

حيث auth_users.id في (8،9)

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