Как я могу получить декартовое произведение из двух столбцов в одной таблице?Получить декартовое произведение из двух столбцов
У меня есть таблица
A 1
A 2
B 3
B 4
и я хочу новую таблицу
A 1
A 2
A 3
A 4
B 1
B 2
B 3
B 4
Как я могу получить декартовое произведение из двух столбцов в одной таблице?Получить декартовое произведение из двух столбцов
У меня есть таблица
A 1
A 2
B 3
B 4
и я хочу новую таблицу
A 1
A 2
A 3
A 4
B 1
B 2
B 3
B 4
создать эту таблицу:
CREATE TABLE [dbo].[Table_1]
(
[A] [int] NOT NULL ,
[B] [nvarchar](50) NULL ,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED ([A] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY]
Заливка таблица вроде этого:
INSERT INTO [dbo].[Table_1]
VALUES (1, 'A')
INSERT INTO [dbo].[Table_1]
VALUES (2, 'A')
INSERT INTO [dbo].[Table_1]
VALUES (3, 'B')
INSERT INTO [dbo].[Table_1]
VALUES (4, 'C')
SELECT *
FROM [dbo].[Table_1]
Используйте этот запрос
SELECT DISTINCT
T1.B ,
T2.A
FROM dbo.Table_1 AS T1 ,
dbo.Table_1 AS T2
ORDER BY T1.B
Чтобы уточнить ответ Loup (в более подробно, что допустимо в комментарии), любой присоединиться не соответствующих критериям, указанным естественным образом произвести декартово произведение (вот почему ответ glib на ваш вопрос может быть «слишком легко» - ошибочно делать t1 INNER JOIN t2 ON t1.Key = t1.Key даст тот же результат).
Однако SQL Server предлагает явный вариант, чтобы ваши намерения были известны. CROSS JOIN - это, по сути, то, что вы ищете. Но, как INNER JOIN, превращаясь в декартово произведение без полезного условия соединения, CROSS JOIN переходит к простому внутреннему соединению, если вы избегаете добавлять критерии присоединения в предложение WHERE.
Если это одноразовая операция, вероятно, не имеет значения, что вы используете. Но если вы хотите дать понять, для потомков, рассмотрите CROSS JOIN.
ваш стол
try this using joins
select distinct b.let,a.id from [dbo].[cartesian] a join [dbo].[cartesian] b on a.id<>b.id
приведет как этот
Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –
спасибо, что сказал мне, я сделал изменения @MarcoForberg –
что вы пробовали? – Hariharan
Что вам нужно, это * self-join *, что означает, что вы присоединяетесь к таблице для себя. – Gabe