Соедините 2 таблицы и покажите все - PullRequest
0 голосов
/ 25 декабря 2009

У меня есть 2 простые таблицы:

таблица:

id | txt
---+----
0  | aaa
1  | bbb
2  | ccc

Таблица B:

id | tel
---+----
0  | 000
2  | 111

Я пытаюсь объединить две таблицы, например:

SELECT a.*,b.* 
  FROM a,b 
 WHERE a.id=b.id

Работает, , но , если в таблице "b" нет записи, она ничего не показывает.

то, что показывает sql, выглядит примерно так:

id | txt | tel
---+-----+----
0  | aaa | 000
2  | ccc | 111

Я также хочу перечислить «пустую» строку a.id = 1:

id | txt | tel
---+-----+-----
1  | bbb | NULL

Есть идеи? Спасибо! (SQL для MS Access / oledb)

Ответы [ 3 ]

2 голосов
/ 25 декабря 2009

Вы хотите левое внешнее объединение (или полное внешнее объединение, если вы хотите строки, в которых также нет записи в таблице a).

SELECT a.*,b.* FROM a LEFT OUTER JOIN b ON a.id=b.id

В зависимости от системы, синтаксис LEFT JOIN также может работать.

2 голосов
/ 25 декабря 2009

В конструкторе запросов MSAccess щелкните правой кнопкой мыши на связи между двумя таблицами и измените ее свойства. Измените его, чтобы «показать все записи из таблицы а».

1 голос
/ 26 декабря 2009

Это:

SELECT a.*,b.* 
  FROM a, b 
 WHERE a.id = b.id

... - это синтаксис внутреннего соединения ANSI-89, и я настоятельно рекомендую вместо этого использовать синтаксис ANSI-92:

SELECT a.*,
       b.*
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

... в основном из-за того, что синтаксис ANSI-88 для левого соединения с таблицами не был последовательно реализован в различных базах данных. Это вернет ожидаемые результаты:

   SELECT a.id,
          a.txt,
          b.tel
     FROM TABLE_A a
LEFT JOIN TABLE_B b ON b.id = a.id

LEFT JOIN означает, что вы получите все записи из TABLE_A в этом примере, и когда в TABLE_B будет соответствующая запись (на основе критерия ON), будет отображаться значение. В противном случае ссылки на столбцы TABLE_B будут возвращать значения NULL.

Для получения дополнительной информации о СОЕДИНЕНИЯХ см. на этой странице для великолепной наглядной демонстрации того, что каждый из них представляет и как они сравниваются .

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