在INNER JOIN MySQL中组合reduntant行

时间:2016-04-28 10:18:15

标签: php mysql sql

我需要知道是否可以组合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

1 个答案:

答案 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等报表系统可以很好地将这些矩形结果集转换为精美的布局。