Какая операция SQL даст мне произведение двух кортежей? - PullRequest
1 голос
/ 27 января 2010

Освежи мою память. Я не могу вспомнить, как объединить кортежи (a, b) и (c) для получения (a, b) * (c). Например:

n
---
0
1
2

А

site_id     value
----------- -------------
1           a
1           b
2           c

Я бы хотел закончить с:

site_id     value          n
----------- -------------- -- 
1           a              0
1           a              1
1           a              2 
1           b              0
1           b              1
1           b              2
2           c              0
2           c              1
2           c              2

Как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 27 января 2010

Это называется CROSS JOIN , также известный как декартово произведение.

SELECT *
FROM Table1
CROSS JOIN Table2

Вы также можете сделать это без ключевого слова JOIN, просто запятую:

SELECT * FROM Table1, Table2

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

CREATE TABLE Table1 (n int NOT NULL);
INSERT INTO Table1 (n) VALUES
(0),
(1),
(2);

CREATE TABLE Table2 (site_id int NOT NULL, value nvarchar(100) NOT NULL);
INSERT INTO Table2 (site_id, value) VALUES
(1, 'a'),
(1, 'b'),
(2, 'c');

SELECT Table2.site_id, Table2.value, Table1.n FROM Table1, Table2

Результаты:

site_id  value  n
      1      a  0
      1      a  1
      1      a  2
      1      b  0
      1      b  1
      1      b  2
      2      c  0
      2      c  1
      2      c  2
1 голос
/ 27 января 2010

Вы можете попробовать

Select *
FROM table1, table2
1 голос
/ 27 января 2010

Кросс-соединение

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