1

我想检索所有成员和所有成员船的列表。我这样做的方式是获取会员拥有的每艘船的会员信息。因此,如果成员 John Smith 有 3 艘船,则显示 John Smith 3 次。我希望名称和信息显示一次,并且空列而不是与船一起重复。

SELECT m.memberId, m.fName, m.lName, m.ssn, b.boatId, b.length, bt.type
FROM member AS m
RIGHT JOIN boat AS b
ON m.memberId = b.memberId
INNER JOIN boatType AS bt
ON b.boatTypeId = bt.boatTypeId
4

3 回答 3

1

如果我了解您的要求,则 Mysql 无法生成此类查询:

 Owner 1 details, boat 1 details
                  boat 2 details
                  boat 3 details
 Owner 2 details, boat 4 details
                  boat 5 details

正如评论中的注释,在您取回数据后,这种类型的分组是在显示端完成的。

于 2012-10-18T19:38:46.627 回答
1

正如 Joe 建议的那样,您可以像这样在 MySQL 中使用 GROUP_CONCAT 和 CONCAT 函数。

   SELECT m.memberId, m.fName, m.lName, m.ssn, 
          GROUP_CONCAT(CONCAT(b.boatId, '(', bt.type, ':',b.length,' ft.)')
                       ORDER BY bt.boatId SEPARATOR '; ')
     FROM member AS m
LEFT JOIN boat AS b ON m.memberId = b.memberId
     JOIN boatType AS bt ON b.boatTypeId = bt.boatTypeId
 GROUP BY m.memberId, m.fName, m.lName, m.ssn

这会给你这样的行。

1 Larry Ellison 123-45-6789 USA 17(Americas Cup:113 ft.); Rising Sun(Diesel:453 ft.)
2 Ollie Jones 987-65-4321 Scruffy Guppy(Sunfish:12 ft.)
于 2012-10-18T21:05:07.000 回答
0

添加 group by 子句。

GROUP BY m.member id, m.fName, m.lName, m.ssn

至于boatId、length 和 type 字段,您必须决定应该显示 3 艘船的 ID 长度和类型中的哪一个(使用您的示例)。

于 2012-10-18T19:38:32.187 回答