2017-08-08 98 views
-2

我有問題,查詢MySQL的 查詢乘以量不應該MySQL的 - 左加入乘法

表 「訂單」:

[ID, NAME  ] 
[22 , "Example"] 

表 「支付」:

[ID, ORDER_ID, AMOUNT] 
[1 , 22  , 120 ] 

表 「文件」:

[ID, ORDER_ID, NAME] 
[1 , 22  , "Test 1"] 
[2 , 22  , "Test 2"] 

我想:

[ID, NAME  , PRICE_SUM, INDEXS   ] 
[22, "Example", 120  , "Test 1, Test 2"] 

現在我得到它(在PRICE_SUM錯誤)

[ID, NAME  , PRICE_SUM, INDEXS   ] 
[22, "Example", 240  , "Test 1, Test 2"] 

我的查詢:

SELECT 
    orders.id, 
    orders.name, 
    sum(payments.amount) as price_sum, 
    GROUP_CONCAT(
     CASE WHEN documents.name = "Private" THEN documents.index END 
    ) AS indexs 
FROM 
    `orders` 
    LEFT JOIN `payments` ON `payments`.`order_id` = `orders`.`id` 
    LEFT JOIN `documents` ON `documents`.`id_order` = `orders`.`id` AND `documents`.`name` = "Private" 
GROUP BY 
    `orders`.`id` 
ORDER BY 
    `orders`.`id` DESC 
+0

問題是什麼用' price_sum'是'price_sum'應該是120嗎? –

+0

無論如何,您的查詢無效SQL,因爲您正在選擇不屬於GROUPING的列(orders.name)。 MySQL在容錯設置下容忍這個錯誤,但是你得到的值將是組內一個_random_記錄的值。 – CBroe

+0

@LewisBrowne因爲訂單是1付款... –

回答

1

我認爲你有必要選擇這樣的一個相關子查詢:

SELECT 
    o.id, 
    o.name, 
    sum(p.amount) as price_sum, 
    (select GROUP_CONCAT(
     d.name 
     ) 
     from d 
      where d.order_id = o.id 

    ) AS indexs 
FROM o 
LEFT JOIN p ON p.`order_id` = o.`id` 
GROUP BY 
    o.`id`,o.name 
ORDER BY 
    o.`id` DESC 

鑑於

drop table if exists o,p,d; 
create table o (ID int, NAME varchar(20)); 
insert into o values 
(22 , 'Example'); 

create table p (ID INT, ORDER_ID INT, AMOUNT INT); 
INSERT INTO P VALUES 
(1 , 22  , 120); 

CREATE TABLE D (ID INT, ORDER_ID INT, NAME VARCHAR(20)); 
INSERT INTO D VALUES 
(1 , 22  , 'Test 1'), 
(2 , 22  , 'Test 2'); 

查詢結果

+------+---------+-----------+---------------+ 
| id | name | price_sum | indexs  | 
+------+---------+-----------+---------------+ 
| 22 | Example |  120 | Test 1,Test 2 | 
+------+---------+-----------+---------------+ 
1 row in set (0.02 sec) 
+0

我想如何使用:在哪裏? –

+0

你想要什麼?在問題中沒有一個。 –

+0

我知道...所以,如果我想找到「索引」,...? 謝謝! –

0

在你Documents表,你有兩次 - 這會當您加入DocumentsPayments的金額加倍。