SQL соединяет две таблицы
У меня есть 2 таблицы сотрудников (имя и имя) и зарплата (идентификатор, зарплата), 1-й имеет 4 строки, а 2-й имеет 2 строки.
table 1 Table 2
id Name id salary
1 Sue 1 10000
2 Sarah 3 9000
3 Nick
4 james
Я хочу присоединиться следующим образом
id Name Salary
1 Sue 10000
2 Sarah No Salary
3 Nick 9000
4 james No salary
4 ответа
Это должно сделать свое дело.
SELECT e.id, e.name , s.salary FROM employees e
INNER JOIN salary s
ON e.id=s.id
ORDER BY e.id ASC
редактировать:
если данные зарплаты имеют нулевые переменные, попробуйте вместо этого LEFT JOIN
Чтобы получить все строки из T1
при присоединении к столу T2
при этом отсутствуют строки 2 и 4, вам нужно использовать левое внешнее соединение. Для строк 2 и 4 зарплата будет нулевой.
Чтобы заменить нулевое значение чем-то другим, вы можете использовать coalesce. Coalesce возвращает первый ненулевой аргумент.
С полем salary
объявлен как int
поле, и вы хотите No Salary
в качестве выхода, где нет зарплаты, вы должны бросить int
к varchar
прежде чем использовать его в качестве аргумента в объединении.
declare @T1 table(id int, name varchar(10))
declare @T2 table(id int, salary int)
insert into @T1 values(1, 'Sue')
insert into @T1 values(2, 'Sarah')
insert into @T1 values(3, 'Nick')
insert into @T1 values(4, 'james')
insert into @T2 values(1, 10000)
insert into @T2 values(3, 9000)
select
T1.id,
T1.name,
coalesce(cast(T2.salary as varchar(10)), 'No Salary') as salary
from @T1 as T1
left outer join @T2 as T2
on T1.id = T2.id
Результат
id name salary
----------- ---------- ----------
1 Sue 10000
2 Sarah No Salary
3 Nick 9000
4 james No Salary
SELECT e.id, e.name ,
case
when s.salary is null then 'no salary'
else cast(s.salary as varchar)
end
FROM employees e LEFT JOIN salary s
ON e.id=s.id
order by e.id
Ваша цель состоит в том, чтобы перечислить всех сотрудников, независимо от того, имеют ли они перечисленную зарплату, поэтому вы должны использовать LEFT JOIN
, Внутреннее объединение может потенциально перечислять зарплаты для сотрудников, у которых больше нет списка в таблице Employee, и в неявном объединении (я полагаю) будут отсутствующие строки.
Что-то вроде этого должно делать то, что вам нужно:
SELECT E.id, E.name, S.salary FROM Employees E LEFT JOIN Salary S ON E.id = S.id