我試圖從table_m中獲取table_m中的所有行,這些行在table_mi中也有一個索引,我期望得到2行作爲結果(使用m.id = 3和m.id = 9) - 但是如果我將GROUP_CONCAT添加到我的select中,然後我只返回一行。我在我的那些聯盟中有什麼地方出現了一個錯誤?MySQL:爲什麼GROUP_CONCAT會在我的多重連接查詢中丟失行?
查詢:
SELECT
m.id,
m.name,
m.keyword,
IFNULL(GROUP_CONCAT(r.keyword),'TEST') AS restrictions
FROM
table_m AS m
INNER JOIN
table_mi as mi ON m.id=mi.m_id
LEFT JOIN
table_ri as ri ON m.id=ri.m_id
LEFT JOIN
table_r AS r ON ri.r_id=r.id
WHERE
(
m.id>0
AND m.active=1
AND mi.p_id=0
AND (mi.pa_id="11" OR (mi.pa_id=0 AND mi.id!=0))
AND mi.u_id=IF((SELECT id FROM table_mi WHERE p_id=0 AND pa_id="11" AND u_id="2")>0,"2",0)
) OR mi.id=0
ORDER BY
mi.priority;
這是我得到的結果:
ID NAME KEYWORD RESTRICTIONS 9 test_a key_a r_key_2,r_key_3,r_key_4
這就是我期待:
ID NAME KEYWORD RESTRICTIONS 9 test_a key_a r_key_2,r_key_3,r_key_4 3 test_b key_b TEST
請參閱我的在sql小提琴上有模式的完整示例:http://sqlfiddle.com/#!2/359d9/1
+1添加
GROUP BY m.id
爲'GROUP_CONCAT '說明 – Stephan謝謝,GROUP BY幫了我很多:D(也編輯了我的例子來說明爲什麼我想使用GROUP_CONCAT更好一些) –