У меня есть таблица, которая дает значение между двумя элементами. Таблица имеет следующие столбцы:Производительность запросов SQL-запросов
itemA | itemB | value
1 | 2 | 125
1 | 3 | 56
3 | 2 | 78
2 | 4 | 24
4 | 1 | 994
3 | 4 | 7
Я подчеркиваю, что значения симметрии не повторяются. Например, теперь есть строка с itemA = 2 и itemB = 1 со значением = 125, так как эти данные уже сохранены с помощью itemA = 1 и itemB = 2.
Теперь я хотел бы получить все значения между пунктами 1, 2 и 3, но также и с симметричными значениями. Нечто подобное в наборе результатов SQL:
itemA | itemB | value
1 | 2 | 125
1 | 3 | 56
2 | 1 | 125
2 | 3 | 78
3 | 1 | 56
3 | 2 | 78
мне удалось получить, что с происходит некорректно SQL запроса:
select itemA as iA, itemB as iB, value
from table
where itemA in (1,2,3)
and itemB in (1,2,3)
union all
select itemB as iA, itemA as iB, value
from table
where itemA in (1,2,3)
and itemB in (1,2,3)
order by iA, iB;
Однако, это было сказан мне, что оператор UNION является производительность убийцей, и это таблица имеет более 100 М строк. Но после часов мозгового штурма я не нашел другого способа получить это. Пожалуйста, вы могли бы увидеть более качественный, более эффективный SQL-запрос, чтобы получить этот набор результатов.
Спасибо заранее
больше подходит для codereview, чем stackoverflow. Кстати, упоминание СУБД действительно никогда не болит ... – gdoron
Да, база данных: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production – Comencau