我有两个表,如下所示
hotels
------
hotelID
hotelName
第二张表
operators
---------
opID
opName
opServices
opHotelID
一个简短的解释:在第一个表格中,我有很多酒店的增量ID是唯一的。第二张表包含为该酒店提供额外服务的所有运营商。这里的opID也是唯一的,但opHotelID存在多次,因为可能有很多运营商提供酒店。
现在,我想得到的是:
我想获得HotelName和一个额外的列(称为操作员),列出所有提供酒店的运营商。
所以结果应该是这样......
123 - Hotel ABC - OP1,Op2,OP3
而不是......
123 - Hotel ABC - OP1
123 - HOtel ABC - OP2
123 - Hotel ABC - OP3
有没有办法在一个SQL查询中执行此操作,或者您将如何解决此问题?我目前正在研究搜索功能,目前我有一个带左连接的简单SELECT查询,但这会返回更多行。现在,搜索应该只显示唯一的HotelID,并将不同的Operators组合在一列中。
感谢您的帮助,祝您度过愉快的一天......
再见 WorldSignia
答案 0 :(得分:2)
试试这个:
SELECT hotels.hotelID,
hotels.hotelName,
GROUP_CONCAT(operators.opName SEPARATOR ', ') AS opList
FROM hotels
INNER JOIN operators
ON operators.opHotelID = hotels.hotelID
GROUP BY(hotels.hotelID)
如果你想拥有运营商的数量,你必须在运营商ID上使用COUNT:
SELECT hotels.hotelID,
hotels.hotelName,
GROUP_CONCAT(operators.opName SEPARATOR ', ') AS opList,
COUNT(operators.opID) AS nbOperatos
FROM hotels
LEFT JOIN operators
ON operators.opHotelID = hotels.hotelID
GROUP BY(hotels.hotelID)
答案 1 :(得分:1)
您可以使用GROUP_CONCAT
答案 2 :(得分:0)
你应该有一个简单的链接表,这将为许多运营商创建多对多的关系到酒店
operatorhotels
---------
opID
opHotelID
答案 3 :(得分:0)
如果您不想更改数据库设计,可以使用此查询
SELECT hotelID,hotelName,opName FROM hotels h
INNER JOIN operators o ON h.hotelID = o.opHotelID
GROUP BY h.hotelID,hotelName,opName
否则,创建一个映射表,产生many to many
关系
答案 4 :(得分:0)
您应该按照建议使用GROUP_CONCAT。这是查询:
SELECT h.hotelID, h.hotelName, GROUP_CONCAT(o.opName)
FROM hotels h
INNER JOIN operators o ON h.hotelID = o.opHotelID
GROUP BY h.hotelID