2012-10-17 2 views
2

мой первый результат выглядит следующим образомРегистрация два SQL результат

ID  Name 
---------------------------------- 
1  George 
2  Peter 
3  San 

мой другой результат выглядит как этот

AnotherID  ID  Note 
----------------------------------- 
1    1  georgesnote1 
2    1  georgesnote2 
3    3  sansnote1 
4    1  georgesnote3 

Как я хочу, чтобы они выглядели:

ID  Name  Note 
---------------------------------- 
1  George  georgesnote1 
1  George  georgesnote2 
1  George  georgesnote3 
2  Peter  NULL 
3  San   sansnote1 

Мой SQL знания в значительной степени ограничивает меня этим. Наверное, мне нужно что-то вроде UNION ALL. INNER JOIN или LEFT OUTER JOIN не работает. Мой фактический запрос - около 21 строки, поэтому это не вопрос начинающих. Мне нужно объединить два результата на основе одинаковых идентификаторов. Пожалуйста, помогите мне.

+0

выберите n.ID, n.Name, t.note из имен п оставили присоединиться заметки т на n.id = t.id –

+0

всех. спасибо за помощь. действительно ценю это! исправил мои запросы, основываясь на данных ответах, и выбрал первый ответ как можно лучше, так как он был первым. –

ответ

2

Вам нужен LEFT JOIN.

выписка http://www.w3schools.com/sql/sql_join_left.asp

Assugming первой таблицы называется первой и второй называется второй. Столбец id на первой таблице будет сопоставлен с колонкой id на второй таблице.

SELECT first.id, first.name, second.note 
FROM first 
LEFT JOIN second 
ON first.id = second.id 
ORDER BY first.id 
+1

это должно быть 'ON first.id = second.id' –

+0

да, извините. изм. – Baconator507

+0

8 одинаковых ответов, но я предполагаю, что я должен согласиться с тобой, так как ты первый, чтобы ответить. Спасибо за помощь. –

2
SELECT 
    N1.ID, N1.Name, N2.Note 
FROM 
    Names N1 
    LEFT JOIN Notes N2 ON N1.ID = N2.ID 
ORDER BY 
    N1.ID 
2

Вы должны использовать left join:

select r1.id, r1.Name, r2.Note 
from result1 r1 
left join result2 r2 on r2.id = r1.id 
order by 1 

но если ваши результаты из других тетрадей пытаются добавить эти дести, как показано ниже:

select r1.id, r1.Name, r2.Note 
from (select id,name from tab1) r1 
left join (select id,note from tab2) r2 on r2.id = r1.id 
order by 1 

Here вы можете найти больше информация о left join

+0

Почему -1? Может быть, какой-то комментарий, пожалуйста? – Parado

1
Select sur.ID, sur.NAME, not.NOTE 
FROM SURNAME sur 
LEFT JOIN NOTES not 
ON sur.ID = not.ID 
1
select 
    T1.ID, 
    T1.Name, 
    T2.Note 
from Table1 as T1.ID 
    left outer Table2 as T2 on T2.ID = T1.ID 
1

LEFT JOIN является то, что вам нужно здесь, потому что вы хотите, чтобы выбрать все записи из table1 whetehr имеет матч или нет на table2

SELECT a.ID, a.Name, b.Note 
FROM table1 a 
     LEFT JOIN table2 b 
      ON a.ID = b.ID 
1
select table1.id,table1.name,table2.note from table1 left join table2 on table1.id=table2.id 
2
select n.ID, n.Name, t.note 
    from names n 
    left join notes t 
    on n.id = t.id 
+0

Замечание о том, почему левое соединение не работает для этого. –

+0

Я пытался присоединиться к другой таблице (которая находится в моем втором запросе сейчас) к моему первому запросу с левым внешним соединением. По какой-то причине одни и те же результаты показывали x4 раза и просто не могли исправить это. Затем я начал искать способ присоединиться к двум различным запросам, чтобы получить соответствующий результат. В моем случае внешний внешний не работал. –

+0

Возможно, вам следует вставить эти два вопроса. –

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