[英]Multiple selection of three tables
我有三个链接表 - order_tab包含订单, autosorder_tab连接另外两个和auto_tab包含商店中的所有汽车。
一个订单可以包含任意数量的汽车。
CREATE TABLE order_tab
(`id` int, `_phone` varchar(10), `_email` varchar(9), `_date` varchar(10))
;
INSERT INTO order_tab
(`id`, `_phone`, `_email`, `_date`)
VALUES
(1, '111-111111', 'ok@ok.com', '2013-08-19')
;
CREATE TABLE auto_tab
(`id` int, `us_id` int, `str_1` varchar(3), `str_2` varchar(8))
;
INSERT INTO auto_tab
(`id`, `us_id`, `str_1`, `str_2`)
VALUES
(2, 0, 'BMW', '530i E60'),
(6, 0, 'BMW', '530i')
;
CREATE TABLE autosorder_tab
(`id` int, `au_id` int, `or_id` int, `hours` int, `price` decimal(19,2))
;
INSERT INTO autosorder_tab
(`id`, `au_id`, `or_id`, `hours`, `price`)
VALUES
(1, 2, 1, 3, 2700),
(2, 6, 1, 2, 3500)
order_tab id - 是主要的。 or_id从autosorder_tab是order_tab ID。 au_id是来自auto_tab的 id
如何为每个订单中的所有车辆选择所有订单?
如果我理解正确,只需使用JOIN
SELECT o.*, a.*
FROM autosorder_tab ao JOIN order_tab o
ON ao.or_id = o.id JOIN auto_tab a
ON ao.au_id = a.id
ORDER BY o.id, a.id
这是SQLFiddle演示
更新如果要按订单分组信息,请使用GROUP BY
和适当的聚合函数。 对于要使用GROUP_CONCAT()
的汽车名称
SELECT o.id, o._date,
GROUP_CONCAT(CONCAT(a.str_1, ' ', a.str_2)
ORDER BY a.str_1, a.str_2
SEPARATOR ',') autos,
SUM(hours) hours,
...
FROM autosorder_tab ao JOIN order_tab o
ON ao.or_id = o.id JOIN auto_tab a
ON ao.au_id = a.id
GROUP BY o.id
要更改分隔符,请使用SEPARATOR
子句。 或者默认情况下使用逗号,然后在客户端代码中迭代结果集时,根据表示规则更改它。
这是SQLFiddle演示
应该如下。 请试试..
SELECTED order_tab
所有行。
然后按订单ID降序加入autosorder_tab
, auto_tab
和ORDERED。
SELECT * FROM order_tab
INNER JOIN autosorder_tab ON order_tab.id = autosorder_tab.or_id
INNER JOIN auto_tab ON auto_tab.id = autosorder_tab.au_id
ORDER BY order_tab.id DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.