SQL JOIN查询语法

时间:2012-07-31 13:49:48

标签: mysql sql

我有一个用于存储购买的表格,以及一个用于存储产品的表格。

购买表中的每一行最多可包含9个产品ID(8个可以为空)

id, foo, bar, baz, product_1_id, product_2_id, product_3_id, etc... 

现在我需要查询购物表的所有字段,以便在html页面中显示。

我无法仅显示产品ID,因此我需要在产品表中找到相应的product_name。

SQL查询让我很难过。

任何帮助都会非常感激。

6 个答案:

答案 0 :(得分:2)

要检索产品名称,我试试这个:

SELECT t2.product_name as product_name_1, t3.product_name as product_name_2, t4.product_name as product_name_1, [...]
FROM purchases as t1
JOIN products as t2 ON(t1.product_1_id = t2.product_id)
LEFT JOIN products as t3 ON(t1.product_2_id = t3.product_id)
LEFT JOIN products as t4 ON(t1.product_3_id = t4.product_id)
[...]
WHERE t1.id = ...

但这可能非常慢,您可能想重组数据库。

答案 1 :(得分:1)

您需要加入Products表9次。但考虑规范化

select id, foo, bar, baz, p1.product_name, p2.product_name, p3.product_name, 
  etc...  
from purchases as pur
left join products as p1 on pur.product_1_id=p1.product_id
left join products as p2 on pur.product_2_id=p2.product_id
.
.

答案 2 :(得分:0)

在sql中你可以像这样使用..

 select *,PM.Product_id,P.Product_name from purchase_mst PM, product P where   
 PM.Product_id1=P.Product_id1 and PM.Product_id2=P.Product_id2 etc....

答案 3 :(得分:0)

通过正确规范化的设计,您可以获得:product,purchase_Order和purchase_order_line,查询将只是:

SELECT     ...
FROM       purchase_order
INNER JOIN purchase_order_line
ON         purchase_order.id = purchase_order_line.purchase_order_id
INNER JOIN product
ON         purchase_order_line.product_id = product.id

答案 4 :(得分:0)

我认为如果你有一个表连接购买产品的表格会更容易,有两列* product_id,purchase_id *。

但是,我猜你可以尝试这样的事情:

SELECT pr1.name
 FROM purchases pur1, products pr1
WHERE pur1.product_1_id = pr1.id
UNION ALL
SELECT pr2.name
 FROM purchases pur2, products pr2
WHERE pur2.product_1_id = pr2.id
UNION ALL
-- and so on until
SELECT pr9.name
 FROM purchases pur9, products pr9
WHERE pur9.product_9_id = pr9.id

虽然这看起来非常可怕,但我强烈建议您重新考虑数据库设计。

答案 5 :(得分:0)

你可以这样做

从购买加入产品中选择购买。,产品。,id1 = id,id2 = id ...等等。

阅读本文:

MySQL how to join tables on two fields