私は私が複製することができると思いますが、受注とORDER_ITEMS間の順序番号のリンクを持っていると仮定すると(なぜあなたは注文品目レベルでの顧客IDを持っているでしょうか?)あなたのクエリが間違っていると、あなたのDBの設計が間違っていると言うでしょうこの
ariaDB [sandbox]> select * from customers;
+------+------+
| id | name |
+------+------+
| 1 | John |
| 2 | Jane |
+------+------+
2 rows in set (0.00 sec)
MariaDB [sandbox]> select * from orders;
+-------------+---------+------------+------------+
| ordernumber | cust_id | orderdate | shipdate |
+-------------+---------+------------+------------+
| 1 | 1 | 2016-01-01 | 2016-02-01 |
| 2 | 1 | 2016-02-01 | NULL |
+-------------+---------+------------+------------+
2 rows in set (0.00 sec)
MariaDB [sandbox]> select * from order_details;
+------+-------------+-----------------+-------------+---------+
| id | ordernumber | quantityordered | quotedprice | cust_id |
+------+-------------+-----------------+-------------+---------+
| 1 | 1 | 10 | 10 | 1 |
| 2 | 1 | 20 | 20 | 1 |
+------+-------------+-----------------+-------------+---------+
2 rows in set (0.00 sec)
ようなあなたの問題は、私はあなたのクエリを使用して、私の結果で2行を取得するために期待されるこのデータ(私のデータのために改正された)
MariaDB [sandbox]> select c.id,c.name,o.ordernumber,o.orderdate,od.quantityordered
-> from customers c
-> join orders o on o.cust_id = c.id
-> join order_details od on od.cust_id = c.id
-> order by ordernumber;
を考えるしかし、実際には、私は4行を取得します
+------+------+-------------+------------+-----------------+
| id | name | ordernumber | orderdate | quantityordered |
+------+------+-------------+------------+-----------------+
| 1 | John | 1 | 2016-01-01 | 20 |
| 1 | John | 1 | 2016-01-01 | 10 |
| 1 | John | 2 | 2016-02-01 | 10 |
| 1 | John | 2 | 2016-02-01 | 20 |
+------+------+-------------+------------+-----------------+
4 rows in set (0.00 sec)
カスタマーIDの注文明細に参加しているためです。 より合理的なアプローチは、私が期待する3行を与える
ariaDB [sandbox]> select c.id,c.name,o.ordernumber,o.orderdate,od.quantityordered
-> from customers c
-> join orders o on o.cust_id = c.id
-> left join order_details od on od.ordernumber = o.ordernumber
-> order by ordernumber;
+------+------+-------------+------------+-----------------+
| id | name | ordernumber | orderdate | quantityordered |
+------+------+-------------+------------+-----------------+
| 1 | John | 1 | 2016-01-01 | 20 |
| 1 | John | 1 | 2016-01-01 | 10 |
| 1 | John | 2 | 2016-02-01 | NULL |
+------+------+-------------+------------+-----------------+
ORDER_DETAILSは、注文番号で注文に参加していることに合流する(左を使用して順序は何のORDER_DETAILSを持っていないだけの場合には参加)をカスケード接続することです。
違いがありますか? – Swetha
はい、LEFT JOINは、JOINの左側の表の行と、JOINの右側の表の対応する行を選択します。 – McNets
LEFTを使用すると、phpmyadminはフリーズします。 – Swetha