Что это за SQL-соединение? - PullRequest
       48

Что это за SQL-соединение?

0 голосов
/ 05 октября 2009

Скажем, почему-то у меня есть сотрудники в двух отдельных таблицах employee1 и employee2

Я просто хочу сложить их вместе, как будто они сложены друг на друга.

что-то вроде:

select all from employee1 and employee2 where name = bubba

я знаю, что я обобщаю, это в конечном итоге будет в postgres, так что, если есть какие-то подробности, я должен следить за спасибо

Ответы [ 10 ]

11 голосов
/ 05 октября 2009
SELECT field1, field2, field2 FROM tableA WHERE field1='x'
UNION
SELECT field1, field2, field2 FROM tableB WHERE field1='x'

Используйте UNION ALL, если хотите, чтобы каждая запись даже повторялась.

4 голосов
/ 05 октября 2009

Вы просто хотите заключить союз

select * from Employee1 where name = 'bubba'
union
select * from Employee2 where name = 'bubba'
3 голосов
/ 05 октября 2009

Вы захотите использовать ключевое слово UNION

select * from employee1 where name = 'bubba'
union
select * from employee2 where name = 'bubba'
2 голосов
/ 05 октября 2009

В большинстве баз данных то, что вы запрашиваете, называется UNION и записывается так:

select all from employee1 where name = bubba

UNION

select all from employee2 where name = bubba

Это происходит от оператора "объединения" * в реляционной алгебре , одного из ее примитивов.

Обратите внимание, что UNION следует заданным объединениям, а именно: для любых строк, дублирующих таблицы E1 и E2, будет выбрана только ОДНА копия копии строки. Если вы хотите выбрать все копии, используйте оператор «UNION ALL».

1 голос
/ 05 октября 2009

То, что вы хотите, это «союз всех»:

select * from employee1
union all
select * from employee2;

Типы и порядок столбцов должны совпадать, иначе вам нужно будет указать списки столбцов, а не "*" в списке выбора. Предложение "where" может быть добавлено к одному или обоим операторам "select".

Без "all" любые повторяющиеся строки между двумя запросами будут объединены в одну строку. Если вы хотите этого, просто удалите «все».

1 голос
/ 05 октября 2009

Думаю, это союз

Выберите * у сотрудника 1, где name = 'bubba'

союз

выберите * из employee2, где name = 'bubba'

Используйте union all, если вам нужны дубликаты.

1 голос
/ 05 октября 2009

Если таблица имеет ту же схему, то

SELECT * FROM employee1 UNION SELECT * FROM employee2

Обе таблицы должны иметь одинаковое количество столбцов, а столбцы должны быть одинакового типа.

1 голос
/ 05 октября 2009

Я думаю, вы ссылаетесь на операцию UNION .

0 голосов
/ 11 января 2010

Несмотря на это, объединение всех выполняется быстрее, поскольку не нужно сортировать, чтобы избавиться от дубликатов в двух наборах.

0 голосов
/ 05 октября 2009

Как уже упоминалось, вы хотите UNION. Однако, если вы действительно хотите, чтобы результаты были сложены, вы должны использовать UNION ALL. UNION удалит дубликаты, UNION ALL включает их. Смотри http://www.postgresql.org/docs/8.2/interactive/queries-union.html

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