#sql
#sql
Вопрос:
Вероятно, глупый вопрос: но я потратил достаточно часов, чтобы мне действительно нужна была помощь извне.
У меня есть одна таблица со списком имен: некоторые из этих имен могут отсутствовать во второй таблице, и мне нужны все имена в списке.
Во второй таблице у меня есть несколько одинаковых имен, но эти имена могут быть перечислены с указанием даты события и типа события.
Как бы я перечислил все имена из первой таблицы. А также включают события из второй таблицы с учетом конкретных типов событий.
Это означает, что имя в первой таблице не связано с событием во второй таблице, оно все равно будет напечатано.
Я пробовал left outer join: но все еще не могу понять, как ограничить данные, поступающие из второй таблицы: или, если я помещаю предложение where, предложение where, похоже, аннулирует добавление всех имен из таблицы 1, потому что они не соответствуют параметрам, которые я размещаю в таблице 2.
Комментарии:
1. Пожалуйста, отправьте образец данных
2. показывает, что вы пытались сделать, чтобы мы могли попытаться исправить или улучшить это, а также показать правильную выборку данных и ожидаемый результат
3. При использовании
outer join
критериев withwhere
вам необходимо переместитьwhere
критерии в критерии,on
join
чтобы это не отменялоouter join
.
Ответ №1:
Для SQL Server мое предложение выглядит примерно так:
CREATE TABLE tblNames(
Name NVARCHAR(MAX) NOT NULL)
GO
INSERT INTO tblNames (Name) VALUES ('Jim'), ('Jack'), ('Joe')
GO
CREATE TABLE tblEvents(
Name NVARCHAR(MAX) NOT NULL,
EventDate NVARCHAR(max) NOT NULL,
EventType NVARCHAR(max) NOT NULL)
GO
INSERT INTO tblEvents (Name, EventDate, EventType) VALUES
('Jim', '04/05/2000', 'Birthday'),
('Joe', '01/01/1999', 'Marriage')
GO
SELECT
tblNames.Name,
tblEvents.EventDate,
tblEvents.EventType
FROM tblNames
LEFT OUTER JOIN tblEvents
ON tblNames.Name = tblEvents.Name
AND tblEvents.EventType = 'Birthday'
Он предоставит вам все имена в именах столбцов, и если в tblEvents есть запись с соответствующим типом события, у вас будет эта информация в других столбцах.
Комментарии:
1. нельзя ли также отказаться от вложенного запроса и вместо этого поместить второй критерий в соединение, например
on tblNames.Name = tblEvents.Name and tblEvents.EventType = 'Birthday'
2. @Todd вы совершенно правы. Это намного приятнее и компактнее. Я отредактировал образец. Спасибо.