अब मुझे लगता है कि मैं इसे समझता हूं।
यदि उपयोगकर्ताओं के पास प्रत्येक प्रश्न का केवल एक ही उत्तर है, तो यह कार्य करना चाहिए:
select ua.quid,
GROUP_CONCAT(IF(uid=1,answer,'') SEPARATOR '') as a1,
GROUP_CONCAT(IF(uid=20008,answer,'') SEPARATOR '') as a2
from user_answers ua
where importance <> 1 and uid in (1, 20008)
group by ua.quid
having sum(uid = 1) > 0 and
sum(uid = 20008) > 0 and
max(case when uid = 1 then answer end) <> max(case when uid = 20008 then answer end);
संपादित करें:
बेशक, उपयोगकर्ता कर सकते हैं एकाधिक उत्तर हैं। यह मुझे join
. की ओर धकेल रहा है एक समग्र-केवल दृष्टिकोण के बजाय दृष्टिकोण। दुर्भाग्य से, इस तरह के दृष्टिकोण के लिए full outer join
की आवश्यकता होती है , जिसका MySQL समर्थन नहीं करता है। तो, आइए पहले उत्तर द्वारा एकत्रित करने का प्रयास करें। आपके पास केवल दो उपयोगकर्ता हैं, इसलिए हम मानों को पिवट करेंगे:
select ua.quid,
GROUP_CONCAT(IF(user1 > 0, answer, '') SEPARATOR '') as a1,
GROUP_CONCAT(IF(user20008 > 0, answer, '') SEPARATOR '') as a2
from (select ua.quid, ua.answer,
max(case when ua.uid = 1 then 1 else 0 end) as user1,
max(case when ua.uid = 20008 then 1 else 0 end) as user20008
from user_answers ua
where importance <> 1 and ua.uid in (1, 20008)
group by ua.quid, ua.answer
) t
where t.user1 = 0 or t.user20008 = 0
group by ua.quid;