Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL联接查询语法_Mysql_Sql - Fatal编程技术网

Mysql SQL联接查询语法

Mysql SQL联接查询语法,mysql,sql,Mysql,Sql,我有一张桌子,用来存放购买的物品,还有一张桌子,用来存放产品 采购表中的每一行最多可以包含9个产品ID(8个可以为空) 现在,我需要查询购买表的所有字段,以便在html页面中显示 我不能只显示产品ID,所以我需要在products表中找到相应的产品名称 SQL查询让我很难受 非常感谢您的帮助。要检索产品名称,我可以尝试以下方法: SELECT t2.product_name as product_name_1, t3.product_name as product_name_2, t4.prod

我有一张桌子,用来存放购买的物品,还有一张桌子,用来存放产品


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

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

我不能只显示产品ID,所以我需要在products表中找到相应的产品名称

SQL查询让我很难受


非常感谢您的帮助。

要检索产品名称,我可以尝试以下方法:

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 = ...

但这可能会非常缓慢,您可能需要重新构建数据库。

要检索产品名称,我会尝试以下方法:

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 = ...

但这可能会非常缓慢,您可能需要重新构造数据库。

您需要9次加入Products表。但是考虑正常化<
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
.
.

您需要加入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
.
.

在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....

在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....

使用正确的规范化设计,您将拥有:产品、采购订单和采购订单行,查询将是:

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

使用正确的规范化设计,您将拥有:产品、采购订单和采购订单行,查询将是:

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

我认为,如果您有一个表,用两列*product\u id,purchase\u 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

尽管这看起来很吓人,我强烈建议重新考虑数据库设计。

我认为如果有一个表,用两列*product\u id,purchase\u 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
尽管这看起来很可怕,我强烈建议重新考虑数据库设计。

你可以这样做

选择采购、产品。从id1=id、id2=id上的购买加入产品。。。等等

请阅读以下内容:

你可以这样做

选择采购、产品。从id1=id、id2=id上的购买加入产品。。。等等

请阅读以下内容:


您是否应该只拥有一个products表,而不是将购买限制为九种产品?您是否可以重新设计数据库以使用联接表?“购买表中的每一行最多可以包含9个产品ID(8个可以为空)”。通常,这将存储在单独的表“采购项目”或“采购产品”中。我想“购买”并不是一个好名字,因为它指的是一个单独的项目。经典名称是“采购订单”和“采购订单项目”或“采购订单行”。您的设计的问题在于它不灵活(每次购买最多9个产品),而且很难查询。每次购买每个潜在产品时,您都需要加入。对于一个单独的采购订单项目表,您只需要一个。我想知道当用户向订单添加第10个产品时,您将向用户发送什么消息。“对不起,我们只想卖给你9件商品?”:)我必须承认,你的评论是对的。但是,如果有人想一次购买十种产品,我很乐意从头开始重新思考,免费……;)您是否应该只拥有一个products表,而不是将购买限制为九种产品?您是否可以重新设计数据库以使用联接表?“购买表中的每一行最多可以包含9个产品ID(8个可以为空)”。通常,这将存储在单独的表“采购项目”或“采购产品”中。我想“购买”并不是一个好名字,因为它指的是一个单独的项目。经典名称是“采购订单”和“采购订单项目”或“采购订单行”。您的设计的问题在于它不灵活(每次购买最多9个产品),而且很难查询。每次购买每个潜在产品时,您都需要加入。对于一个单独的采购订单项目表,您只需要一个。我想知道当用户向订单添加第10个产品时,您将向用户发送什么消息。“对不起,我们只想卖给你9件商品?”:)我必须承认,你的评论是对的。但是,如果有人想一次购买十种产品,我很乐意从头开始重新思考,免费……;)谢谢你,罗兰。我很想学习。我在哪里可以找到关于正确规范化设计的信息?网络上有很多东西,只是谷歌而已。例如,这是一个合理的开始,因此这真的很有帮助。谢谢罗兰,谢谢你罗兰。我很想学习。我在哪里可以找到关于正确规范化设计的信息?网络上有很多东西,只是谷歌而已。例如,这是一个合理的开始,因此这真的很有帮助。谢谢罗兰。