Справка по синтаксису SQL, условное AND - PullRequest
4 голосов
/ 28 июля 2011

Кодировал в течение 48 часов подряд, и я бьюсь головой о стену здесь. Пожалуйста, помогите мне с этой маленькой проблемой.

Мой SQL-запрос такой:

SELECT u.Firstname, u.Lastname, u.Rep, u.Email, u.Password, u.Gender, u.Level,
       u.Birthday, u.Achievements, u.Height, u.Unit, u.cityid, u.countryid,
       r.RegDate, ci.Name AS City, co.Name AS Country
FROM Users u, Registry r, Cities ci, Countries co
WHERE u.id = 1 AND r.uid = u.id AND u.cityid = ci.id AND u.countryid = co.id
LIMIT 1

Моя проблема в том, что я только что заметил, что иногда Users.cityid и Users.countryid равны NULL (что нормально).

Я хочу, чтобы запрос дал мне всю другую информацию (например, возврат NULL для City и Country) для этого пользователя, даже если одно или оба , эти поля NULL , Как сделать условные части AND?

Надеюсь, я проясняю себя в своей туманности.

Ответы [ 2 ]

4 голосов
/ 28 июля 2011

Я думаю, вам нужна пара OUTER соединений, если я правильно понял вашу ситуацию.

SELECT ...
FROM Users u
INNER JOIN Registry r ON r.uid = u.id
LEFT JOIN Cities ci ON u.cityid = ci.id
LEFT JOIN Countries co ON u.countryid = co.id
WHERE u.id = 1 
3 голосов
/ 28 июля 2011

Вам нужно использовать LEFT JOIN на своих столах вместо WHERE.

Таким образом, ваше FROM превращается в:

FROM Users u JOIN Registry r on u.id = r.uid 
LEFT JOIN Cities ci ON u.cityid = ci.id
LEFT JOIN Countries co ON u.countryid = co.id
WHERE u.id = 1 LIMIT 1

LEFT JOIN является1009 * присоединиться;он объединит таблицы, где крайний левый (следовательно, LEFT в JOIN) термин в JOIN (т. е. первый, который появляется) имеет запись, а другая таблица - нет.OUTER JOIN s полезны в таких ситуациях, когда у вас не обязательно есть записи данных во всех таблицах для того, что вы хотите от запроса;поначалу они могут сбивать с толку, но они очень важны для правильного использования SQL.

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