我需要知道是否可以组合INNER JOIN的结果,而不会得到重复的值。这是我的问题:
我有两张桌子:
product
product_id, product_name, image
product_price
product_id, selling_price, mrp
当我使用INNER JOIN
组合这两个表时,我得到了预期组合的结果:
查询:
SELECT `product`.`product_id`, `product`.`product_name`, `product`.`image`,
`product_price`.`selling_price`, `product_price`.`mrp`
FROM `product`
INNER JOIN product_price ON `product.product_id` = `product_price.product_id`
正如预期的那样,这很好,我得到了结果(vardump()php):
array (size=2)
0 =>
array (size=6)
'product_id' => string '8' (length=1)
'product_name' => string 'product1' (length=8)
'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36)
'selling_price' => string '100' (length=3)
'mrp' => string '110' (length=3)
1 =>
array (size=6)
'product_id' => string '8' (length=1)
'product_name' => string 'product1' (length=8)
'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36)
'selling_price' => string '200' (length=3)
'mrp' => string '220' (length=3)
现在,正如您所看到的,这两行包含重复的product_id、product_name和image列,我在想是否有办法避免这种冗余,结果是:
array (size=6)
'product_id' => string '8' (length=1)
'product_name' => string 'product1' (length=8)
'image' => string '587d0e605fb52ed571f80a9e9d0d4cea.png' (length=36)
array (size=2)
0 =>
'selling_price' => string '100' (length=3)
'mrp' => string '110' (length=3)
1 =>
'selling_price' => string '200' (length=3)
'mrp' => string '220' (length=3)
谢谢,-Sreejith
在MySQL中,实际上在所有关系数据库管理系统中,每个查询的结果都是由行和列组成的矩形表。正如你所知,结果是这样的:
product_id product_name image selling_price mrp
8 product1 xxx.png 100 110
8 product1 xxx.png 200 220
9 product2 aaa.png 17 18
9 product2 aaa.png 22 24
你在问MySQL是否可以生成一个更像这样的数据结构:
product_id product_name image selling_price mrp
8 product1 xxx.png 100 110
200 220
9 product2 aaa.png 17 18
22 24
每个不同产品都有项目。
答案是否,而不是仅通过一个查询。
您可以查询产品表,然后对于产品表中的每一项都可以查询价格表。这将产生您想要的数据结构。但这是非常低效的——它执行了太多的查询。
您可以使用单个查询,并使用ORDERBY来确保每个产品的结果都在结果集中的连续行中。然后,您可以在应用程序中检测那些连续的相同行。
像CrystalReports、Jasper或BIRT这样的报告系统能够很好地将这些矩形结果集转换为呈现良好的布局。