2013-04-04 82 views
0
SELECT 
    op.sub_order_id, 
    s.supplier_id, 
    GROUP_CONCAT(opb.box_id SEPARATOR ','), 
    op.delivery_country 

FROM 
    order_p op 
INNER JOIN 
    supplier s ON s.supplier_id = op.supplier_name 
LEFT JOIN 
    order_boxes opb ON op.sub_order_id = opb.sub_order_id 
WHERE 
    op.order_active=0 
    AND op.ship_date>='2013-01-01' 
    AND op.ship_date<='2013-04-24' 
ORDER BY op.ship_date DESC 

我不是很擅長連接,所以請耐心等待。mysql內連接後出現連接出錯記錄集

我有這個查詢,我需要從給定的日期範圍之間的order表中選擇所有數據,以便supplier表中存在匹配的供應商映射。現在隨着這些信息,如果它存在於由sub_order_id字段鏈接的order_boxes表中,我還需要獲取任何框。

現在,如果我只是加入訂單和供應商表格,我會得到大約1000條記錄的正確記錄集,但只要我嘗試在表格中添加,我就只能得到一行。我猜這是因爲箱表中只有一條記錄,但我需要它從訂單表和箱表中獲取所有記錄。如果我嘗試使用INNER JOIN而不是LEFT JOIN,那麼我只能得到1個匹配子順序的記錄,但是使用左連接,我會在日期範圍內獲取第一條記錄,而不管sub_order_id和boxes表中的值如何。

請幫忙。此外,如果您需要更多信息,請讓我知道。

編輯:我很抱歉,我沒有發佈之前的全部東西,但我認爲問題是與GROUP_CONCAT,它將整個記錄集分組在哪裏,因爲我只想組合箱表中的記錄.. ..可能我應該使用子查詢?

電流輸出

179-1 | 2 | 2,4,3 | Canada 

預計輸出

168-1 | 1 |  | Texas 
..... 
...... 
179-1 | 2 | 2,4,3 | Canada 
..... 
...... 
+0

PLZ改變您的訂單表的名稱,可能會是因爲這個造成的問題是保留關鍵字 – Suleman 2013-04-04 06:16:42

+0

好,我變了,但結果沒有改變設置 – Bluemagica 2013-04-04 06:20:29

+0

你能更清晰。嘗試爲您的場景提供數據。 – Santhosh 2013-04-04 06:21:06

回答

0
SELECT * FROM 
(
    SELECT * FROM order op INNER JOIN 
    supplier s ON s.supplier_id = op.supplier_name 

    WHERE 
    op.order_active=0 
    AND op.ship_date>='2013-01-01' 
    AND op.ship_date<='2013-04-24' 
    ORDER BY op.ship_date DESC 
) AS a 

LEFT JOIN order_boxes opb ON a.sub_order_id = opb.sub_order_id 

試試這個,告訴我,這是否幫助你或沒有。

+0

我在'SELECT * FROM order_p op'上遇到語法錯誤' – Bluemagica 2013-04-04 06:28:13

+0

對不起,我的壞,用「()」替換「{}」,它應該擺脫語法。我會馬上編輯我的答案 – 2013-04-04 06:34:39

0

嘗試轉換日期

WHERE 
op.order_active=0 
AND op.ship_date>= 
convert(datetime,cast('2013-01-01' as varchar),101) 
AND op.ship_date<= 
convert(datetime,cast('2013-04-24' as varchar),101) 
         ORDER BY op.ship_date DESC 
+0

日期不是問題,原因如果我刪除最後一個帶有表格的連接,記錄正在被正確提取 – Bluemagica 2013-04-04 06:24:16

+0

然後我必須搜索更多.. :) – Luv 2013-04-04 06:28:19