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
我不是很擅长加入,所以请耐心等待。
我有这个查询,我需要在给定的日期范围内选择order
表中的所有数据,以便在supplier
表中存在匹配的供应商映射。现在连同此信息,我还需要获取任何框,如果它存在于由sub_order_id字段链接的order_boxes
表中。
现在,如果我只是加入订单和供应商表,我会得到大约1000条记录的正确记录集,但是当我尝试在框表中添加时,我只得到一行。我猜这是因为盒子表中只有一条记录,但我需要它从订单表和盒子表中获取所有记录。如果我尝试INNER JOIN
而不是LEFT JOIN
,我只得到匹配的子订单的1条记录,如框表中所示,但是使用左连接,我获得了日期范围内的第一条记录,而不管sub_order_id以及方框表中的值。
请帮忙。如果您还需要更多信息,请告诉我。
编辑:我很抱歉我之前没有发布完整的内容,但我认为问题出在GROUP_CONCAT上,它将整个记录集分组到哪里,因为我只想将记录分组到盒子表....也许我应该使用子查询?
当前输出
179-1 | 2 | 2,4,3 | Canada
预期输出
168-1 | 1 | | Texas
.....
......
179-1 | 2 | 2,4,3 | Canada
.....
......
答案 0 :(得分: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
试试这个并告诉我这是否对您有所帮助。
答案 1 :(得分: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