Использование самосоединений против вложенных запросов PL / SQL - PullRequest
0 голосов
/ 19 ноября 2010

Мне нужно выполнить запрос, подобный этому:

Предположим, столбцы таблицы похожи на - <key>,<name>,<value>, и мне нужно найти значение для имени = 'NAME' при следующих условиях.

  1. Ключ должен находиться в keys_i, где name_i = 'NAME_i' и значение = 'VALUE_i'.
  2. Ключ должен находиться в keys_j, где name_j = 'NAME_j' и значение = 'VALUE_j'.
  3. Ключ должен находиться в keys_k, где name_k = 'NAME_k' и value = 'VALUE_k'.

В настоящее время я использую вложенный запрос в форме:

  Select a.value from <table_name> a 
  where a.name='NAME' 
  and a.key IN(
    Select b.key 
    from <table_name> b 
    where (b.name = 'NAME_i' and b.value = 'VALUE_i') 
    and b.key IN(
           Select c.key 
           from <table_name> c 
           where (c.name = 'NAME_j' 
            and c.value = 'VALUE_j') 
           and c.key IN(
               Select d.key 
               from <table_name> d 
               where (d.name = 'NAME_k' and d.value = 'VALUE_k'))));

Есть ли более обобщенная форма, использующая Self Join или любую другую технику?Моя таблица небольшая, и оптимизация на самом деле не требуется, но что было бы идеальным решением для больших наборов данных?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2010

Мой случай для запроса PL / SQL и базы данных Oracle. Также помогло бы узнать для MySQL.

0 голосов
/ 19 ноября 2010

Я думаю, что это сильно зависит от реализации базы данных и от того, как оптимизатор запросов будет переписывать каждый тип запроса.Не думайте, что вы сможете ответить на этот вопрос сразу обо всех системах баз данных.

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