1

注文を含むorder_tab 、他の 2 つを接続するautosorder_tab、店内のすべての車を含むauto_tabの3 つのリンクされたテーブルがあります。 1 つの注文に何台の車を含めることもできます。

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 - メインです。autosorder_tabor_idorder_tabのidです。au_idauto_tab のID です。各注文のすべての車をすべての注文から選択するにはどうすればよいですか?

4

2 に答える 2

3

私が正しく理解している場合は、使用してください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のデモです

于 2013-07-31T06:04:28.660 に答える
1

以下のようになるはずです。してみてください..

すべてorder_tabの行を選択しました。

次に JOINED autosorder_tabauto_tabオーダー ID の降順で 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 
于 2013-07-31T06:04:44.900 に答える