MySQL LEFT JOIN, который не будет работать - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть mysql-соединение и по какой-то причине он возвращает дубликаты полей для изображения, имени и фамилии.Как будто он не соединяется правильно.

Вот SQL

SELECT a.follow_id, a.user_id, a.following, b.firstname, b.lastname, c.firstname,   c.lastname, b.image, c.image
FROM followers a 
LEFT JOIN candidates b ON a.following = b.user_id
LEFT JOIN donors c On a.following = c.user_id
WHERE a.user_id = 222
LIMIT 9

И кандидаты, и доноры имеют имя, фамилию и изображение, поэтому мне нужно получить эти поля, но не дублировать поля.

Мои результаты enter image description here

Может кто-нибудь сказать, что я делаю не так?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 26 февраля 2012
SELECT a.follow_id, a.user_id, a.following, b.firstname, b.lastname, b.image
FROM followers a 
LEFT JOIN candidates b ON a.following = b.user_id
WHERE a.user_id = 222


UNION DISTINCT


SELECT a.follow_id, a.user_id, a.following, c.firstname,   c.lastname,  c.image
FROM followers a 
LEFT JOIN donors c On a.following = c.user_id
WHERE a.user_id = 222

Я не уверен, что правильно понимаю вашу проблему.

0 голосов
/ 26 февраля 2012

Ваши поля follow_id и following являются уникальными.Поскольку вы присоединяетесь к таблицам кандидатов и доноров, используя уникальное следующее поле, вам необходимо создать 2 подзапроса, которые извлекают соответствующую информацию из каждой таблицы, а также user_id из таблицы последователей.

Затем вы можетеделайте свои объединения из таблицы подписчиков в каждый подзапрос:

SELECT f.user_id,
       can.firstname,
       can.lastname,
       don.firstname,
       don.lastname,
       can.image,
       don.image
FROM   followers f
       LEFT JOIN (SELECT a.user_id,
                         a.following,
                         b.firstname,
                         b.lastname,
                         b.image
                  FROM   followers a
                         INNER JOIN candidates b
                           ON a.following = b.user_id) can
         ON f.user_id = can.user_id
       LEFT JOIN (SELECT a.user_id,
                         a.following,
                         c.firstname,
                         c.lastname,
                         c.image
                  FROM   followers a
                         INNER JOIN donors c
                           ON a.following = c.user_id) don
         ON f.user_id = don.user_id
WHERE  f.user_id = 222
LIMIT  9;
...