Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle LISTAGG() за използване при заявки

Първо, почти винаги е по-ефективно да направите всичко в един израз, ако изобщо е възможно.

Втората ви заявка не работи, тъй като връщате всичко в един низ. Това не списък, разделен със запетая, както се изисква от оператор IN.

Има обаче малък трик, за да заобиколите това. Ако приемем, че използвате низа за нещо между двата оператора SELECT, можете да си поиграете с regexp_substr() за да превърнете вашия низ в нещо използваемо.

Нещо подобно би свършило работа;

select city
  from vwpersonprimaryaddress
 where state in ( 
           select regexp_substr(v_province,'[^'',]+', 1, level) 
             from dual
          connect by regexp_substr(v_province, '[^'',]+', 1, level) is not null
                  )

Променливата v_province ще трябва да се промени, за да се цитира два пъти, например '''AB'',''AZ'',''BC''' за да работи това.

Ето един работещ пример



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. if(condition, then, else) в Oracle

  2. Променете неуникален индекс на уникален индекс

  3. Решение кога да се създаде индекс на колона на таблица в база данни?

  4. Промяна на датата на валидност на потребителската парола на Oracle

  5. SQL заявка с CASE и групиране по