SQL все данные из первой таблицы некоторые данные из таблицы 2

#sql

#sql

Вопрос:

Вероятно, глупый вопрос: но я потратил достаточно часов, чтобы мне действительно нужна была помощь извне.

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

Во второй таблице у меня есть несколько одинаковых имен, но эти имена могут быть перечислены с указанием даты события и типа события.

Как бы я перечислил все имена из первой таблицы. А также включают события из второй таблицы с учетом конкретных типов событий.

Это означает, что имя в первой таблице не связано с событием во второй таблице, оно все равно будет напечатано.

Я пробовал left outer join: но все еще не могу понять, как ограничить данные, поступающие из второй таблицы: или, если я помещаю предложение where, предложение where, похоже, аннулирует добавление всех имен из таблицы 1, потому что они не соответствуют параметрам, которые я размещаю в таблице 2.

Комментарии:

1. Пожалуйста, отправьте образец данных

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

3. При использовании outer join критериев with where вам необходимо переместить 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 вы совершенно правы. Это намного приятнее и компактнее. Я отредактировал образец. Спасибо.