Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle LISTAGG () để sử dụng truy vấn

Thứ nhất, hầu như luôn luôn hiệu quả hơn khi thực hiện mọi thứ trong một câu lệnh duy nhất nếu có thể.

Truy vấn thứ hai của bạn không hoạt động vì bạn đang trả lại mọi thứ thành một chuỗi duy nhất. Đây không phải là không danh sách được phân tách bằng dấu phẩy theo yêu cầu của câu lệnh IN.

Có một mẹo nhỏ để giải quyết vấn đề này. Giả sử bạn đang sử dụng chuỗi cho thứ gì đó giữa hai câu lệnh SELECT, bạn có thể sử dụng regexp_substr() để biến chuỗi của bạn thành một cái gì đó có thể sử dụng được.

Một cái gì đó như thế này sẽ hoạt động;

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
                  )

Biến v_province sẽ phải được thay đổi để được trích dẫn hai lần, ví dụ:'''AB'',''AZ'',''BC''' để điều này hoạt động.

Đây là ví dụ hoạt động



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi số thành ngày tháng trong oracle

  2. ràng buộc toàn vẹn oracle

  3. Trừ ngày trong Oracle - Kiểu dữ liệu số hoặc khoảng thời gian?

  4. Làm cách nào để bạn ghi mảng vào db Oracle 10g XE bằng iBatis?

  5. cách lấy tên của phân vùng trong oracle khi tôi nhập ngày tháng