2016-09-15 1 views
0

は、私は、クエリがあります。Mysqlクエリのグループ値はどのようになっていますか?

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 

さて、私は別の値を持つ1 OBJ_IDを持っています。 しかし、私にとって、これは次のようになります:

 
obj_id name id 221 248 
1  first 2 3 

これを行うには? LEFT JOINの右テーブルの上に

+0

そのクエリは、それらの結果与えることはありません - と述べ、シンプルな 'GROUP BY'句と間違って何ですか? –

答えて

0

条件は、彼らがWHERE句である場合には、自動的に参加INNER JOINためNULLの比較になり、唯一ON句内で指定する必要があります。
また、複数の値の代わりにORに同じ列を比較するIN()を使用します。私もそう、1行にグループに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

この作品!しかし、私はもう1つのフィールド(221,248,1123)を使用しない場合は、その後、動作しません! – muldy

関連する問題