2016-09-15 17 views
0

我有查詢:Mysql查詢中的group值如何?

SELECT  p.`obj_id` , 
      p.`alt_name` , 
      o.`name`, 
      p.`id`, 
      oc.`text_val`, 
      oc.`float_val` 
FROM  `cms3_hierarchy` p 
LEFT JOIN `cms3_objects` o 
    ON  p.`obj_id` = o.`id` 
LEFT JOIN `cms3_object_content` oc 
    ON  p.`obj_id` = oc.`obj_id` 
WHERE  (oc.`field_id` = 221 OR oc.`field_id` = 248) 
    AND  (p.`rel`=903687) LIMIT 0,50 

但是這樣回答:

 
obj_id name id 221 248 
1  first 2 null 
1  first null 3 

嗯,我有一個obj_id使用不同的值。 但對我來說,這是這個樣子:

 
obj_id name id 221 248 
1  first 2 3 

如何做到這一點?在LEFT JOIN的右表

+0

該查詢不會放棄這些成果 - 這麼說,有什麼錯一個簡單的'GROUP BY'條款? –

回答

0

條件應該只ON子句中指定,當他們是WHERE子句中,將自動加入變成因爲NULLINNER JOIN的比較。
此外,使用IN()給相同的列比較多個值,而不是OR。我還用MAX()到組的行成一排,所以:

SELECT p.obj_id , p.alt_name , o.name,p.id, 
     MAX(CASE WHEN oc.field_id = 221 THEN oc.text_val END) as col_221, 
     MAX(CASE WHEN oc.field_id = 1123 THEN oc.text_val END) as col_1123, 
     MAX(oc.float_val) 
FROM cms3_hierarchy p 
LEFT JOIN cms3_objects o 
ON p.obj_id = o.id 
LEFT JOIN cms3_object_content oc 
ON p.obj_id = oc.obj_id and oc.field_id in(221,248,1123) 
WHERE p.rel=903687 
LIMIT 0,50 
GROUP BY p.obj_id , p.alt_name , o.name,p.id 
+0

不,這是相同的查詢! – muldy

+0

@muldy立即嘗試。 – sagi

+0

這項工作!但是,如果我不會使用更多的字段(221,248,1123),那麼不起作用! – muldy