MySQL - Как объединить две таблицы без дубликатов? - PullRequest
1 голос
/ 27 сентября 2011

У меня есть две таблицы, подобные следующей:

hotels
------
hotelID
hotelName

Вторая таблица

operators
---------
opID
opName
opServices
opHotelID

краткое объяснение: В первой таблице у меня есть много отелей с идентификатором приращения, которыйуникаленВторая таблица содержит всех операторов, предлагающих этот отель с дополнительными услугами.И здесь opID тоже уникален, но opHotelID существует несколько раз, потому что может быть много операторов, предлагающих отель.

Теперь я хочу получить следующее:

Я хочу получитьHotelName и дополнительный столбец (называемый «Операторы»), в котором перечислены все операторы, предлагающие отель.

Таким образом, результат должен быть таким ...

123 - Hotel ABC - OP1,Op2,OP3

вместо этого ...

123 - Hotel ABC - OP1
123 - HOtel ABC - OP2
123 - Hotel ABC - OP3

Есть ли способ сделать это в одном запросе SQL или как бы вы решили эту проблему?В настоящее время я работаю над функцией поиска, и в настоящее время у меня есть простой запрос SELECT с левым соединением, но это возвращает намного больше строк.Теперь Поиск должен отображать только уникальные идентификаторы отелей и объединять разных операторов в одном столбце.

Спасибо за помощь и хорошего дня ...

Пока WorldSignia

Ответы [ 5 ]

2 голосов
/ 27 сентября 2011

Попробуйте это:

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)

Если вы хотите указать количество операторов, вы должны использовать 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 голос
/ 27 сентября 2011

Вы можете использовать GROUP_CONCAT

0 голосов
/ 27 сентября 2011

Вы должны использовать 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
0 голосов
/ 27 сентября 2011

если вы не хотите менять дизайн БД, вы можете использовать этот запрос

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

0 голосов
/ 27 сентября 2011

у вас должна быть простая таблица ссылок, это создаст отношение многих ко многим операторам отеля

operatorhotels
---------
opID
opHotelID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...