SQL选择一对多

时间:2015-08-05 01:50:21

标签: mysql sql select

我想不出任何关于这个问题的术语,而是我给你想要展示的表格。

Table 1
ID | Product | Description
1  | Dell    | Dell Laptop

Table 2
ID | ProductID | Attribute | Description
1  | 1         | Processor | i7
2  | 1         | USB 3.0   | USB 3.0 Descript

使用join我可以显示如下结果:

Product | Attribute | Description
Dell    | Processor | i7
Dell    | USB 3.0   | USB 3.0 Descript

我想要展示的是这样的。

Product | Attribute | Description
Dell    | Processor | i7
        | USB 3.0   | USB 3.0 Descript

如果表2的ProductID与上一行的上一个ProductID相同,则产品名称仅显示一次。我如何只使用SQL做到这一点?

2 个答案:

答案 0 :(得分:0)

试试这个,它按照你的要求运作:

  config: {
    sampleRate: 16000 // or any other sampling rate
  }

答案 1 :(得分:0)

与上面提到的@GordonLinoff一样,这应该在应用程序端完成,而不是使用SQL。以下是在MySQL中如何做到这一点:

SET @row_number := 0 ;
SET @productnames:='';

SELECT 
    CASE 
      WHEN num = 1
          THEN t.Product
    ELSE '' 
    END Product,
    t.Attribute,
    t.Description
FROM
(SELECT 
    @row_number:=CASE WHEN @productnames=t1.product 
                       THEN @row_number+1 
                     ELSE 1 END AS num,
    @productnames:=t1.product AS product,
    t2.Attribute,
    t2.Description
from table1 t1
inner join table2 t2 on t1.ID = t2.ProductID
) t;

SQL Fiddle Demo

这里的技巧是分配一个假row_number,然后只使用Product语句在row_number = 1时填充case when列。希望这可以帮助!