我想从我的数据库中获取一些类似于您在超市获得的收据的数据(只是一个适合我的实际情况的例子)。 例如,您将获得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`
但是你如何实现我想拥有的东西呢?
非常感谢, 菲尔
答案 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`