2012-02-26 2 views
0

У меня есть соединение mysql и по какой-то причине его возвращающие повторяющиеся поля для изображения, firstname и lastname. Как будто это не право.MySQL LEFT JOIN, который не будет работать

Вот 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 

Оба кандидата и доноры имеют ПгвЬЫат и LastName и образ, так что мне нужно, чтобы получить эти поля, но не дублировать поля.

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

Может кто-то пожалуйста, скажите мне, что я делаю неправильно?

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

+0

Я знаю, что я не делаю это право, пожалуйста, покажите мне дорогу! :) –

+0

Почему вы используете 'LIMIT'? –

+0

Подоконник DISTINCT возвращает таблицу с повторяющимися столбцами. –

ответ

1
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

Просмотреть изображение результатов ... Дублировать столбцы –

+0

Вы пробовали мое решение? –

+0

Я только что сделал, и он возвращает две дополнительные строки только с user_id, а другие поля NULL. Почему он возвращает две дополнительные строки? Всего всего две строки данных. –

-1

Ваши 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;