1

У меня есть две таблицы:

Table1
[ID]   [Number]
1      40
2      100
3      7

а также

Table2
[ID]   [Number]   [Name]
1      40         A
3      7          C

Данные создаются в Таблице 1, а затем копируются в Таблицу 2 (с добавленным Именем) после завершения некоторых процессов. Я пытаюсь SELECT все в таблице 1, а также показывает поле имени из таблицы 2, если оно существует. Если поле Имя не существует (или, точнее, если идентификатор еще не существует в таблице 2), я хочу оставить поле пустым.

Желаемый результат:

[ID]   [Number]   [Name]
1      40         A
2      100
3      7          C

Попытка:

SELECT Table1.ID,Table1.Number,Table2.Name
WHERE Table1.ID=Table2.ID

Мои текущие попытки полностью опустили [ID] 2 так как оператор, который я пытаюсь найти, ищет идентификатор в обеих таблицах и находит его только в Таблице 1. Я думаю, что мне может понадобиться использовать COALESCE , ISNULL или JOIN , которые мне чужды. Являются ли какие-либо из этих (или комбинация многих) правильными инструментами для работы? Можно ли как-то включить поле « Name только если оно существует, и в противном случае оставить его пустым?

1 ответ1

2

Чтобы достичь желаемого результата, вы должны использовать внешнее объединение (пример в синтаксисе действителен с Oracle 9i):

SELECT
  Table1.ID,
  Table1.Number,
  Table2.Name
FROM Table1
OUTER JOIN Table2
  ON Table1.ID = Table2.ID

Обновить

Чтобы объяснить вещи немного больше (как упомянуто duDE):

Используемое в вопросе соединение называется равным соединением, это означает, что выбираются только строки в Table1 , которые также существуют в Table2 (и наоборот).

Внешнее соединение выбирает все строки, содержащиеся в Table1 и объединяет все соответствующие строки из Table2 . Если Table2 не содержит соответствующей строки , то null возвращается для всех столбцов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .