2015-05-07 3 views
-1

У меня есть две таблицы member и alumni. alumni таблица может иметь то же самое member в более чем одном ряду с другим полем year. Я хочу выбрать все данные из обеих таблиц. В таблице приведены это:MYSQL Join Две таблицы с одинаковыми данными

Alumni:

id, regd, name, status, year 

1 1 kim  inactive 2013 
2 1 kim  inactive 2014 
3 1 kim  inactive 2015 //This is generated for alumni purpose 

элемент таблицы Предоставленная:

regd, name, status, year 
1 kim  Active  2015 

Ожидаемый результат:

`regd`, `name,` `status,` `year` 
1  kim  Active  2015 
1  kim  inactive  2014 
1  kim  inactive  2013 

Если нет никаких записей например, 2015 год в alumni, он все равно отобразит другой рекордер d в alumni и 2015 от member стол. Я пытаюсь показать это с помощью regd, используя следующий оператор php и mysql, но он не работает должным образом.

Mysql:

SELECT m.*, a.* FROM member m 
LEFT JOIN alumni a ON m.regd = a.regd 
WHERE m.regd ='1' GROUP BY a.year ORDER BY a.year DESC; 

PHP:

foreach($members as member): 
echo $member['regd'].' '.$member['year'].'<br>'; 
endforeach; 

Ошибка, он выбирает все данные из таблицы только alumni. Где я могу пойти не так? Хотя я не предоставлял здесь скрипку, я надеюсь, что это дает мне понять. пожалуйста помогите.

+0

'сливаются (member.status, alumni.status)'? Если нет записи для выпускников, вы получаете запись участника. –

+0

@Marc B, я новичок, пожалуйста, вы можете предоставить более полный пример. – Zopa

+0

- это абсолютно непонятно без скрипки :-) у вас нет столбца 'session' в таблицах данных, которые вы описали. и в соответствии с данными, предоставленными данными, лучше будет «ПРАВОЕ СОЕДИНЕНИЕ», поскольку у выпускников больше записей. И я не вижу причин для группировки записей до тех пор, пока я не увижу ану дубликатов – Alex

ответ

0

Это OUTER JOIN не поддерживается MySQL.

https://stackoverflow.com/a/4796911/4421474

Так что вы должны сделать что-то вроде:

SELECT res.* FROM (
SELECT 
m.regd, 
m.name, 
COALESCE(m.status, a.status), 
m.year, 
FROM member m 
LEFT JOIN alumni a 
ON m.regd = a.regd 
    AND m.year = a.year 
WHERE m.regd ='1' 
UNION 
SELECT 
a.regd, 
a.name, 
a.status, 
a.year, 
FROM member m 
RIGHT JOIN alumni a 
ON m.regd = a.regd 
    AND m.year = a.year 
WHERE a.regd ='1' 
    AND m.regd IS NULL 
) res 
ORDER BY res.year DESC 
+0

Работает без ORDER BY. Ошибка с ORDER BY является неправильным использованием UNION AND ORDER BY. ТАК, что может быть проблемой. – Zopa

+0

:-) ok, так что проверьте обновленный запрос :-) – Alex

+0

Теперь он работает. Вы здоровы и полезны. Большое спасибо. – Zopa

Смежные вопросы