Morfeey
@Morfeey

Как будет верно?

В общем есть база, в которой лежат значения о персонажах в разных таблицах. Проблема в том, что когда мне нужно узнать название гильдии, то у некоторых персонажей её нет и получается что они не попадают в запрос.
Вот сам запрос:
SELECT DISTINCT  `avatar`.`name`, `guild`.`name` AS `Guild`, `sex_res_id`, `parent_id`, `faction_res_id`, `race_class_res_id`, `kills`, `gear_score`,`auth_info`.`user_name` as `login` 
FROM `guild_member_descriptors`, `guild`, `avatar`, `soul`, `auth_info` 
WHERE `auth_info`.`id`= `soul`.`auth_info_id` 
AND `auth_info`.`access_level`='User' AND `avatar`.`soul_id` = `soul`.`id` 
AND `guild_member_descriptors`.`avatar_id` = `avatar`.`id` AND `guild_member_descriptors`.`guild_id` = `guild`.`id` 
AND `avatar`.`is_removed`=0 
AND `avatar`.`gear_score`>5200


Немного объясню как всё происходит:
В таблице `auth_info` - хранятся логины и права.
В таблице `avatar` - хранятся имена персонажей, раса и класс, гир, пол и прочее.
В таблице `guild_member_descriptors` хранятся id аватара, id гильдии и прочие действия, которые он совершил в отношении данной гильдии.
В таблице `guild` хранится название гильдии, кол-во её авторитета и прочая общая информация для тех, кто в неё вступил.
В таблице `soul` - хранится фракция персонажа и прочие небольшие детали.

Как сделать тот же запрос, только если нет гильдии в столбце с гильдией было null, а не просто пропуск аватара ?
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
@mletov
, - эквивалент INNER JOIN
Вам нужен LEFT JOIN

Начинайте выбирать из auth_info, т к данные из этой таблицы должны всегда быть, потом джоините к ней все остальное.

Ограничения тоже старайтесь прописывать не в WHERE, а в ON
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы