#mysql #sql
#mysql #sql
Вопрос:
Мне нужна комбинация строк из одной и той же таблицы. Возможно ли это? Вот моя таблица :
CREATE TABLE `ta` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `ta` (`id`, `name`) VALUES
(1, 'ta1'),
(2, 'ta2'),
(3, 'ta3'),
(4, 'ta4');
Результат должен быть таким, как показано ниже :
| ta1 | ta2 |
| ta1 | ta3 |
| ta1 | ta4 |
| ta2 | ta3 |
| ta2 | ta4 |
| ta3 | ta4 |
или
| ta1 | ta2 |
| ta1 | ta3 |
| ta1 | ta4 |
| ta2 | ta1 |
| ta2 | ta3 |
| ta2 | ta4 |
| ta3 | ta1 |
| ta3 | ta2 |
| ta3 | ta4 |
| ta4 | ta1 |
| ta4 | ta2 |
| ta4 | ta3 |
Комментарии:
1. Выберите self join x.name , y.name ИЗ ta x ПРИСОЕДИНИТЬСЯ К ta y НА x.id < y.id
Ответ №1:
Вам нужно сделать CROSS JOIN
между двумя экземплярами вашей таблицы ta
, скажем A amp; B
SELECT
A.name,
B.name FROM ta A CROSS JOIN ta B
WHERE A.id <> B.id
Примечание:
Если вы рассматриваете <a,b> and <b,a>
записи по-разному, то приведенного выше запроса будет достаточно.
И если вам нужна только одна запись для каждой пары, где порядок не имеет значения (т. Е. <a,b> is equal to <b,a>)
тогда вместо этого примите следующее:
SELECT
A.name,
B.name FROM ta A CROSS JOIN ta B
WHERE A.id < B.id
Ответ №2:
Выполните самосоединение:
SELECT t1.name, t2.name
FROM ta t1
JOIN ta t2 ON t1.id < t2.id