[英]Left Join Multiple Tables
我的mysql數據庫結構如下
產品表
+----+--------+-------------+-------+
| id | itemid | title | price |
+----+--------+-------------+-------+
| 1 | 1 | Dell XPS 10 | 1000 |
| 2 | 1 | Dell XPS 13 | 1100 |
| 3 | 1 | HP 1 | 1100 |
+----+--------+-------------+-------+
項目表
+----+-------------+
| id | description |
+----+-------------+
| 1 | Laptop |
| 2 | Monitors |
+----+-------------+
參數表
+----+--------+------------------+
| id | itemid | description |
+----+--------+------------------+
| 1 | 1 | Brand |
| 2 | 1 | Series |
| 3 | 1 | Color |
| 4 | 1 | Operating System |
+----+--------+------------------+
規格表
+----+-----------+-------------+-------------+
| id | productid | parameterid | description |
+----+-----------+-------------+-------------+
| 1 | 1 | 1 | Dell |
| 2 | 1 | 2 | XPS |
| 3 | 1 | 3 | Red |
| 4 | 1 | 4 | Windows 10 |
| 5 | 2 | 1 | Dell |
| 6 | 2 | 2 | XPS |
| 7 | 2 | 3 | Black |
| 8 | 2 | 4 | Windows 7 |
| 9 | 3 | 1 | HP |
| 10 | 3 | 2 | 1 |
| 11 | 3 | 3 | Black |
| 12 | 3 | 4 | Windows 10 |
+----+-----------+-------------+-------------+
我正在嘗試以下結果
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| id | productid | title | price | itemdescription | parameterdescription | specificationdescription |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Dell |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Series | XPS |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
取而代之的是我
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| id | productid | title | price | itemdescription | parameterdescription | specificationdescription |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Dell |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | XPS |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Red |
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Brand | Windows 10 |
+----+-----------+-------------+-------+-----------------+----------------------+--------------------------+
我正在使用以下mysql查詢
SELECT products.title, products.price, items.description, parameters.description, specifications.description
FROM products
LEFT JOIN items ON products.itemid = items.id
LEFT JOIN parameters ON parameters.itemid = items.id
LEFT JOIN specifications ON specifications.productid = products.id
LIMIT 0 , 30
其次,是否可以在同一行中列出所有參數和規格?
+----+-----------+-------------+-------+-----------------+--------------------------+--------------------------+--------------------------+
| id | productid | title | price | itemdescription | specificationdescription | specificationdescription | specificationdescription |
+----+-----------+-------------+-------+-----------------+--------------------------+--------------------------+--------------------------+
| 1 | 1 | Dell XPS 10 | 1000 | Laptop | Dell | XPS | Red |
+----+-----------+-------------+-------+-----------------+--------------------------+--------------------------+--------------------------+
如果有人對如何改善數據庫結構有任何建議,我願意提出優化建議。 謝謝
以下是@Shakir答案的輸出
+-------------+-------+-------------+------------------+-------------+
| title | price | description | description | description |
+-------------+-------+-------------+------------------+-------------+
| Dell XPS 10 | 1000 | Laptop | Brand | Dell |
| Dell XPS 10 | 1000 | Laptop | Series | Dell |
| Dell XPS 10 | 1000 | Laptop | Color | Dell |
| Dell XPS 10 | 1000 | Laptop | Operating System | Dell |
| Dell XPS 10 | 1000 | Laptop | Screen Size | Dell |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | Dell |
| Dell XPS 10 | 1000 | Laptop | Brand | XPS |
| Dell XPS 10 | 1000 | Laptop | Series | XPS |
| Dell XPS 10 | 1000 | Laptop | Color | XPS |
| Dell XPS 10 | 1000 | Laptop | Operating System | XPS |
| Dell XPS 10 | 1000 | Laptop | Screen Size | XPS |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | XPS |
| Dell XPS 10 | 1000 | Laptop | Brand | Black |
| Dell XPS 10 | 1000 | Laptop | Series | Black |
| Dell XPS 10 | 1000 | Laptop | Color | Black |
| Dell XPS 10 | 1000 | Laptop | Operating System | Black |
| Dell XPS 10 | 1000 | Laptop | Screen Size | Black |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | Black |
| Dell XPS 10 | 1000 | Laptop | Brand | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Series | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Color | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Operating System | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Screen Size | Windows 10 |
| Dell XPS 10 | 1000 | Laptop | Touchscreen | Windows 10 |
+-------------+-------+-------------+------------------+-------------+
試試這個並顯示結果
SELECT products.title, products.price, items.description,
parameters.description, specifications.description
FROM products
INNER JOIN items ON products.itemid = items.id
INNER JOIN parameters ON parameters.itemid = items.id
INNER JOIN specifications ON specifications.productid = products.id
LIMIT 0 , 30
試試這個,看看是否可行。
SELECT
products.title,
products.price,
items.description,
(
SELECT
GROUP_CONCAT(spec.description SEPARATOR ' ')
FROM specifications as spec
WHERE spec.productid = products.id
GROUP BY spec.productid
) AS `specificationdescription`
FROM products
INNER JOIN items ON products.itemid = items.id
LIMIT 0 , 30
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.