खंड में और नहीं लागू नहीं है - mysql, डेटाबेस

तो मेरे पास यह प्रश्न है:

SELECT m.id, (
SELECT GROUP_CONCAT(
DISTINCT tag_id
ORDER BY tag_id
SEPARATOR "-"
) FROM tagging
WHERE mng_id = m.id
ORDER BY tag_id DESC
) as tags
FROM product m
INNER JOIN tagging tg ON (m.id = tg.mng_id)
WHERE 1
AND tg.tag_id IN (34,20) AND tg.tag_id NOT IN (42)
AND (nme LIKE "tomo%" OR alt_nme LIKE "tomo%")
GROUP BY m.id

इस क्वेरी को टैग # 34, 20 के साथ रिकॉर्ड वापस करना चाहिए और टैग # 42 नहीं होना चाहिए, रिकॉर्ड का नाम "टॉमो" से शुरू होना चाहिए।

लेकिन किसी कारण से, यह परिणाम से टैग # 42 के साथ उत्पाद को नहीं हटाता है। क्या कोई इस प्रश्न के साथ इस मुद्दे की पहचान करने में मदद कर सकता है?

उत्तर:

उत्तर № 1 के लिए 1

यदि आप टैग 34 और 20 के साथ रिकॉर्ड चाहते हैं, लेकिन 42 नहीं, तो इस तरह कुछ प्रयास करें:

SELECT p.id
FROM product p INNER JOIN
tagging tg
ON p.id = tg.mng_id
GROUP BY p.id
HAVING SUM(tg.tag_id = 34) > 0 AND
SUM(tg.tag_id = 20) > 0 AND
SUM(tg.tag_id = 42) = 0;

यदि आप परिणामी टैग चाहते हैं, तो बस जोड़ें group_concat(tg.tag_id)

यह आपके दृष्टिकोण से आसान लगता है।


संबंधित सवाल
सबसे लोकप्रिय