簡體   English   中英

左聯接多個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM