将几个术语合并到一个表中?

时间:2012-05-17 07:41:13

标签: mysql

我有下表:

GENRES
gID | gNAME
1   | Fiction 
2   | Non-Fiction
3   | Comedy
4   | Horror

这个表

PRODUCTS
pID | pNAME 
1   | 4 hour work week
2   | screw it let's do it

然后是分配表:

ASSIGNTABLE
aID | pID | gID
1   | 1   | 1
2   | 1   | 2
3   | 2   | 2
4   | 2   | 3
5   | 2   | 4

我需要一个返回以下内容的查询:

pID | pNAME                 | pGENRE
1   | 4 hour work week      | Fiction
2   | screw it let's do it  | Non-Fiction

换句话说,我只需要为每个产品获得一种类型。我该怎么做?

1 个答案:

答案 0 :(得分:2)

如上面的评论中所述,MySQL表是无序的。如果您使用“第一个”表示您想要具有最小gID的流派,则可以使用子查询将ASSIGNTABLE分组为pID并确定所需的流派:

SELECT    PRODUCTS.*, GENRES.gNAME
FROM      PRODUCTS
  JOIN  ( SELECT pID, MIN(gID) gID FROM ASSIGNTABLE GROUP BY pID ) t USING (pID)
  JOIN    GENRES USING (gID)

sqlfiddle上查看。