2011-01-29 5 views
1

У меня есть две таблицы, которые имеют следующие строки:написать запрос в SQL

TABLE1

ID Name Number 
===================== 
1 a 100 
2 b 200 
3 c 300 

TABLE2

ID Number Check 
===================== 
1 100  0 
2 200  1 
3 300 null 

Теперь я хочу следующую таблицу:

table 
--------------------- 
Name Number check 
===================== 
a  100 0 
c  300 null 

Какой запрос я должен написать.

* Вы заметили, что столбец проверки в строке 'c' в итоговой таблице null.

Спасибо.

+1

Какое условие, почему в результате нет строки с именем b и номером 200?В общем, вы ищете LEFT JOIN Кажется – johannes

+1

Подсказка: используйте кнопку фрагмента кода '{}', чтобы отступывать ваши таблицы не менее чем на четыре пробела, чтобы они отображались в моноширинном шрифте. –

+0

Редактировать номер 8 на этот вопрос было, вероятно, ошибкой. Он устранил причину использования «левого внешнего соединения», которое, вероятно, было тем, что OP действительно нужно было знать. –

ответ

0

левое внешнее соединение ваш друг:

select table1.name, table1.nmber, table2.check from table1 left outer join table2 on table1.nmber = table2.number 
0

Предполагая, что столбец nmber в table1 = номер столбца в table2

SELECT a.name, a.nmber, b.check 
FROM table1 a JOIN table2 b ON a.nmber = b.number 
0

Я считаю, что ваш ищет

select a.Name, a.Nmber, b.Check 
from Table1 a join table2 b 
on a.Nmber = b.Number 

также может добавлять клас, например

where a.Name is not b 
where b.check is not 1 

и т.д.

Трудно сказать, из вашего вопроса, как вы хотите, чтобы ваши результаты, чтобы исключить б

0

Настройка тестовых данных.

create table table1(ID int, Name char(1), Number int) 
create table table2(ID int, Number int, [Check] int) 

insert into table1 values (1, 'a', 100) 
insert into table1 values (2, 'b', 200) 
insert into table1 values (3, 'c', 300) 

insert into table2 values (1, 100, 0) 
insert into table2 values (2, 200, 1) 
insert into table2 values (3, 300, null) 

Запрос

select 
    table1.Name, 
    table1.Number, 
    table2.[Check] 
from table1 
    inner join table2 
     on table1.ID = table2.ID 
where Name <> 'b'  

Результат

a 100 0 
c 300 NULL 

Вы должны использовать квадратные скобки имя столбца [check], потому что проверка является зарезервированным словом. в SQL Server.

0

Этот вопрос был отредактирован много. Я считаю, что ответ на исходный вопрос отличается от ответа на текущий вопрос.

Ниже приведена установка для версии 1.

create table table1(ID int, Name char(1), Number int) 
create table table2(ID int, Number int, [Check] int) 

insert into table1 values (1, 'a', 100) 
insert into table1 values (2, 'b', 200) 
insert into table1 values (3, 'c', 300) 

insert into table2 values (1, 100, 0) 
insert into table2 values (2, 200, 1) 

Чтобы получить c из таблицы 1 при соединении с таблицей 2, вам необходимо использовать левое внешнее соединение.

select 
    table1.Name, 
    table1.Number, 
    table2.[Check] 
from table1 
    left outer join table2 
     on table1.ID = table2.ID 
where table1.Name <> 'b'   

Даже в этой версии вам нужны квадратные скобки вокруг чека.

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