我想检索所有成员和所有成员船的列表。 我这样做的方式我得到了每个船员的成员信息。因此,如果一名成员约翰史密斯有3艘船,约翰史密斯将展示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
答案 0 :(得分:1)
如果我理解你要求的内容,在Mysql中不可能生成这种类型的查询:
Owner 1 details, boat 1 details
boat 2 details
boat 3 details
Owner 2 details, boat 4 details
boat 5 details
在评论中注意,在您取回数据后,此类分组在显示方面完成。
答案 1 :(得分: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.)
答案 2 :(得分:0)
添加group by子句。
GROUP BY m.member id, m.fName, m.lName, m.ssn
至于boatId,长度和类型字段,您必须决定应显示3艘船的ID长度和类型中的哪一个(使用您的示例)。