2016-03-03 7 views
1

У меня есть 3 таблицы (2 колонки), такие какВнутреннее соединение MySQL?

table s 
NUM GRADE 
1 A  
2 B  
3 C 
5 D 

table p 
NUM GRADE 
1 B 
2 C 
2 D 
3 A 

table g 
NUM GRADE 
1 A 
3 C 
3 B 
4 D 

Я хочу, чтобы внутреннее соединение их друг с другом таким образом (на s.NUM = p.NUM = g.NUM), как

NUM GRADE 
1 A 
1 B 
1 A  
2 B 
2 C 
2 D 
3 A 
3 C 
3 B 

Что мне делать?

Спасибо

ответ

2

Вы можете объединить UNION ALL запрос с запросом, который идентифицирует общие NUM ценностей, разделяемых между всеми тремя столами. В моем нижеследующем вопросе в этой последней таблице содержится фильтр для удаления любых записей NUM, которые не отображаются во всех трех таблицах.

SELECT t1.NUM, t1.GRADE 
FROM 
(
    SELECT NUM, GRADE FROM s 
    UNION ALL 
    SELECT NUM, GRADE FROM p 
    UNION ALL 
    SELECT NUM, GRADE FROM g 
) t1 
INNER JOIN 
(
    SELECT s.NUM 
    FROM s INNER JOIN p 
     ON s.NUM = p.NUM 
    INNER JOIN g 
     ON s.NUM = G.NUM 
) t2 
    ON t1.NUM = t2.NUM 
ORDER BY t1.NUM 
+0

Что делать, если в таблице есть запись, которая не существует в таблице p и g? Он включен в результат – Sherlock

+0

Хороший улов. up –

+0

Да, я получаю это ... дайте мне 30 секунд –

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