Mysql Join Таблица с двумя другими таблицами на основе столбца флага - PullRequest
0 голосов
/ 11 декабря 2010

У меня есть таблица, которая содержит сообщения от пользователей и организаций. Таблица содержит поле с именем usertype, которое указывает, было ли сообщение отправлено пользователем или организацией.

Мне нужно объединить эту таблицу с двумя таблицами, содержащими сведения о пользователе и организации соответственно.

Как мне написать запрос на соединение с этими 2 таблицами?

Я думаю, что я могу достичь этого через объединение, но можно ли это сделать, используя только объединения?

Таблица - USER fetch: имя пользователя
Таблица - Выбор организации: название организации
Таблица сообщений - записи userid, usertype. необходимо получить имя пользователя, проверив тип данных

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

СОЮЗЫ и СОЕДИНЕНИЯ делают совершенно разные вещи. UNION добавляют записи в конец запроса, JOINs добавляют поля в конец записи.

Если ваш запрос UNION работает, то я бы порекомендовал вам придерживаться его. Если вы действительно хотите сделать это с JOIN, то вы можете сделать следующее и соответственно изменить свой рабочий процесс.

SELECT message_id, message_title, user.name, corp.name
FROM group_messages
LEFT JOIN users ON
   users.user_id = group_messages.user_id
   AND group_messages.usertype = "1"
LEFT JOIN corp ON
   corp.user_id = group_messages.user_id
   AND group_messages.usertype = "0"
;

Что это будет делать, так это возвращать записи с полями для пользователя И поля для корп. Когда usertype равен 1, пользовательские поля будут заполнены, а поля corp будут нулевыми. Когда usertype равен 0, поля corp будут заполнены, а поля пользователя будут нулевыми. Вам нужно будет написать логику приложения, чтобы прочитать возвращенный тип пользователя и определить, какой набор полей читать.

Честно говоря, если вы сделаете что-то подобное, вам будет гораздо лучше просто сделать два отдельных запроса.

Если вы не хотите, чтобы данные для каждого типа находились в отдельных полях, вы не должны использовать JOIN. Если вы хотите, чтобы данные каждого типа возвращались в одно и то же поле, вам нужен UNION, который у вас уже есть.

0 голосов
/ 11 декабря 2010

Мой запрос с использованием Union может быть реализован с помощью объединения?

SELECT message_id, CONCAT_WS ('', fu. user_first_name, fu. user_last_name) uname, user_type, message_title, message_content, posted_on ОТ group_messages FGM JOIN users фу ON FGM. user_type = '1' И фу. user_id = фгм. user_id ГДЕ group_id = '1' UNION
ВЫБРАТЬ message_id, corporate_name uname, user_type, message_title, message_content, posted_on ОТ group_messages FGM JOIN corporate fc ON fgm. user_type = '0' AND фк. corporate_id = фгм. user_id ГДЕ group_id = '1'

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