MYSQL查询问题 - 将产品详细信息加入到结果中

时间:2012-01-03 17:39:00

标签: mysql database join product

我想从我的数据库中获取一些类似于您在超市获得的收据的数据(只是一个适合我的实际情况的例子)。 例如,您将获得2个(始终只有2个)产品1和3.这些产品存储在单独的产品数据库中。 您的购物结果存储在一个数据库中,其中包含2列(product_1和product_2)中的所有详细信息,如时间,位置等。再次,这种购物情况只是与我的实际情况进行比较,所以我知道这对于购物清单来说不是一个好的数据库结构。

所以现在我想获得整张收据,但我没有打印产品ID,而是希望获得名称,例如价格。

如果我只有一个产品,我会使用此查询:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price`
FROM `shopping_list` `list`, `products` `prod`
WHERE `list`.`product_1` = `prod`.`prod_id`

但由于我有两种产品,我不能继续

AND `list`.`product_2` = `prod`.`prod_id`

但是你如何实现我想拥有的东西呢?

非常感谢, 菲尔

3 个答案:

答案 0 :(得分:0)

您需要两次加入产品表

e.g。

SELECT 
      `list`.`time`, 
      `list`.`location`, 
      `prod1`.`prod_name` `prod_name1`, 
      `prod1`.`prod_price` `prod_price1` ,
      `prod2`.`prod_name` `prod_name2`, 
      `prod2`.`prod_price` `prod_price2` 
FROM `shopping_list` `list`
     INNER JOIN  `products` `prod1`
     ON  `list`.`product_1` = `prod1`.`prod_id`     
      INNER JOIN  `products` `prod2`
     ON  `list`.`product_2` = `prod2`.`prod_id`

我不确定您的业务规则是什么,因此如果他们需要始终选择两种产品,您可能需要将第二次INNER JOIN转换为LEFT JOIN。

答案 1 :(得分:0)

我不知道您的具体情况,但通常字段名称如product_1和product_2表示数据库设计不正确。但是,如果你真的需要,你需要两次加入产品表。

select
 * 
from
 list l
 , product p1
 , product p2
where
  l.product_1 = p1.product_id
  and l.product_2 = p2.product_id

(这是oracle语法,但我认为它也适用于mysql)。

第h。

答案 2 :(得分:0)

如果您可以从1个数据库结果行中解析出两行,那么之前的答案效果很好。如果您想要数据库中的两行,则可以执行UNION查询:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price`  
FROM `shopping_list` `list`, `products` `prod`  
WHERE `list`.`product_1` = `prod`.`prod_id` 
UNION
SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price`  
FROM `shopping_list` `list`, `products` `prod`  
WHERE `list`.`product_2` = `prod`.`prod_id`