我需要知道是否可以组合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
答案 0 :(得分:0)
在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
包含每个不同产品的项目。
答案是不,只有一个查询。
您可以查询产品表,然后对于产品表中的每个项目,您都可以查询价格表。这将产生您想要的数据结构。但是,非常效率低下 - 它会进行太多查询。
您可以使用单个查询,并使用ORDER BY确保每个产品的结果都在结果集的连续行中。然后,您可以在应用程序中检测那些连续相同的行。
Crystal Reports,Jasper或BIRT等报表系统可以很好地将这些矩形结果集转换为精美的布局。