2016-10-06 2 views
0

Как написать запрос SQl для создания «NewTable» с использованием таблиц 1 и таблицы 2, результат которого выглядит как «NewTable» ниже?SQL Query: для каждого элемента добавить несколько значений

Table1 
EmmployeeID 
|  1  | 
|  2  | 
|  3  | 

    Table2 
AgencyID 
| a | 
| b | 
| c | 

       NewTable 
     |EmmployeeID|AgencyID| 
     |  1  | a | 
     |  1  | b | 
     |  1  | c | 
     |  2  | a | 
     |  2  | b | 
     |  2  | c | 
     |  3  | a | 
     |  3  | b | 
     |  3  | c |  
+0

Я правильно, что вы хотите создать таблицу со всеми возможными целями EmmployeeID и AgencyID? – Linkan

+3

В какой базе данных вы на самом деле используете здесь? Иногда синтаксис SQL немного отличается, скажем, от Oracle до SQL Server до MySQL в Informix. Отметьте только поставщика базы данных, что важно - это поможет людям дать вам лучший ответ! – SlimsGhost

ответ

1

Создайте третью таблицу, а затем INSERT значения, выполнив CROSS JOIN из Table1 и Table2

CREATE TABLE NewTable 
( 
    EmployeeID int, 
    AgencyID varchar, 
); 

INSERT INTO NewTable 
select EmployeeID, AgencyID 
from Table1 CROSS JOIN Table2 
+0

Благодарим вас за то, что вы сэкономите время. –

1

Сочетание двух таблиц обычно означает JOIN.

Генерация все возможные комбинации («спаривание») строк обычно означает «декартово произведение», также известный как CROSS JOIN, как это:

select EmployeeID, AgencyID 
from Table1 CROSS JOIN Table2 
+0

И для создания новой таблицы 'CREATE TABLE NEWTABLE SELECT ...' –

+1

Синтаксис для создания новой таблицы отличается для разных поставщиков. Поскольку ОП указал 4 поставщика, я попросил его уточнить сначала ... – SlimsGhost

+0

Вы правы в этом. –

0

Использование CROSS APPLY или CROSS JOIN. Например,

declare @a table (a int) 
declare @b table (b char(1)) 

insert @a values (1),(2) 
insert @b values ('a'),('b') 

select * from @a cross apply @b order by a 
1

Попробуйте использовать

CREATE TABLE NewTable 
select EmmployeeID,AgencyID 
from Table1,Table2 
+1

Использование имен таблиц, разделенных запятой, не является отличным подходом. Гораздо лучше явно использовать кросс-соединение. И, конечно, в зависимости от реальной СУБД это может быть или не быть допустимым синтаксисом. –

Смежные вопросы