按ID从内部连接表中选择多个记录

时间:2013-05-14 09:41:34

标签: mysql

第一次尝试内部联接并且事情进展顺利,只有最后一步缺少从我的数据库接收正确的数据。这是我的SQL查询:

SELECT roadtrip_tblgeneral.*, roadtrip_tblhotels.hotel, roadtrip_tbllocation.location, roadtrip_tbltransport.transport
FROM roadtrip_tblgeneral
INNER JOIN roadtrip_tblhotels
ON roadtrip_tblgeneral.id = roadtrip_tblhotels.tripid
INNER JOIN roadtrip_tbllocation
ON roadtrip_tblgeneral.id = roadtrip_tbllocation.tripid
INNER JOIN roadtrip_tbltransport
ON roadtrip_tbltransport.id = roadtrip_tbltransport.tripid
WHERE roadtrip_tblgeneral.tripcode = 'cb8v73x9'

这是我从数据库得到的响应:一切看起来很好,但是一个用户可以将多个车辆添加到具有相同ID的传输中,并且我希望得到所有这些而不仅仅是一个。 (例如,地铁,汽车,自行车......)

id  tripname      tripcode  hotel   location    transport        
1   London        cb8v73x9  Seaside London      Metro

2 个答案:

答案 0 :(得分:1)

我认为这可能是你的问题

ON roadtrip_tbltransport.id = roadtrip_tbltransport.tripid

您似乎试图根据与第一个正在加入的表无关的条件来连接两个表

看看之前行的模式,你的意思是:

ON roadtrip_tblgeneral.id = roadtrip_tbltransport.tripid

正如@kickstart所说,您可以通过将SELECT语句更改为

将所有传输模式移动到一列中
SELECT roadtrip_tblgeneral.*, roadtrip_tblhotels.hotel, roadtrip_tbllocation.location, GROUP_CONCAT(roadtrip_tbltransport.transport)

如果您需要单独访问每个传输类型,最好在应用程序级别处理此问题,但如果您想要的只是一个逗号分隔的传输模式作为单个项目,则GROUP_CONCAT()应该没问题

答案 1 :(得分:0)

使用GROUP BY和GROUP_CONCAT获取一个字段中使用的所有传输,值为逗号分隔

SELECT roadtrip_tblgeneral.*, roadtrip_tblhotels.hotel, roadtrip_tbllocation.location, GROUP_CONCAT(roadtrip_tbltransport.transport)
FROM roadtrip_tblgeneral
INNER JOIN roadtrip_tblhotels
ON roadtrip_tblgeneral.id = roadtrip_tblhotels.tripid
INNER JOIN roadtrip_tbllocation
ON roadtrip_tblgeneral.id = roadtrip_tbllocation.tripid
INNER JOIN roadtrip_tbltransport
ON roadtrip_tblgeneral.id = roadtrip_tbltransport.tripid
WHERE roadtrip_tblgeneral.tripcode = 'cb8v73x9'
GROUP BY roadtrip_tblgeneral.id

请注意,您应该真正使用GROUP BY子句中的所有非聚合字段,但上述情况应该有效。