Я видел людей, которые рекомендовали кросс-присоединение к таблице, делая это:
SELECT *
FROM tbl AS A, tbl AS B
WHERE A.col1 = 1 AND B.col1 = 1
Но здесь движок должен дважды пройти по всем строкам в таблице tbl, чтобы сопоставить два запроса с результатами A и B, несмотря на то, что запросы (и, следовательно, результаты) одинаковы. *
Предполагая, что WHERE на A и B всегда будет одинаковым для двух, это пустая трата времени. Есть ли способ запросить что-то один раз, а затем перекрестно соединить результат этого запроса с самим собой? Я бы хотел избежать временных таблиц, которые потребовали бы записи на диск вместо выполнения всей этой операции в оперативной памяти.
Я использую MySQL, хотя любой ответ на SQL очень помог бы.
Пример:
Предположим, что таблица выглядит следующим образом:
COL1 COL2
1 A
1 B
1 C
2 D
2 E
Когда я запускаю условие where из col1 = 1, оно возвращает первые три строки из приведенной выше таблицы. Мне нужна следующая таблица, но только с одним выполнением оператора where, поскольку две таблицы A и B идентичны:
A.COL1 A.COL2 B.COL1 B.COL2
1 A 1 A
1 A 1 B
1 A 1 C
1 B 1 A
1 B 1 B
1 B 1 C
1 C 1 A
1 C 1 B
1 C 1 C