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

2 cách để chọn hàng phù hợp với tất cả các mục trong một danh sách (T-SQL)

Bài viết này trình bày hai cách để chọn hàng dựa trên danh sách ID (hoặc các giá trị khác) trong SQL Server. Điều này có thể hữu ích trong các trường hợp bạn có danh sách ID được phân tách bằng dấu phẩy và bạn muốn truy vấn cơ sở dữ liệu của mình để tìm các hàng phù hợp với các ID đó.

Giả sử bạn có danh sách ID sau:

1,4,6,8

Và vì vậy, bây giờ bạn muốn truy vấn một bảng để tìm các bản ghi có bất kỳ giá trị nào trong số đó (tức là 1, 4, 6 hoặc 8) trong cột ID của nó.

Đây là hai cách để thực hiện điều đó.

Tùy chọn 1:Toán tử IN

Một tùy chọn là sử dụng IN trong truy vấn của bạn để chỉ trả lại những hàng được chỉ định trong danh sách.

SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistId IN (1,4,6,8);

Kết quả:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Như bạn có thể thấy, các giá trị trong ArtistId phù hợp với cột của chúng tôi trong danh sách.

Tùy chọn 2:Hàm STRING_SPLIT ()

Bắt đầu với SQL Server 2016, STRING_SPLIT() có thể được sử dụng để tách một biểu thức ký tự bằng một dấu phân tách được chỉ định. Nói cách khác, bạn có thể sử dụng nó để chia danh sách được phân tách bằng dấu phẩy.

Dưới đây là một ví dụ sử dụng cùng một dữ liệu như trong ví dụ trước:

SELECT ArtistId, ArtistName
FROM Artists
JOIN STRING_SPLIT('1,4,6,8', ',')
ON value = ArtistId;

Kết quả:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Một lợi ích của STRING_SPLIT() là nó cho phép / (yêu cầu) bạn chỉ định những gì đang được sử dụng làm dấu phân cách cho danh sách. Điều này có thể hữu ích khi danh sách của bạn sử dụng một ký tự khác làm dấu phân cách.

Đây là ví dụ tương tự, nhưng đối với danh sách được phân tách bằng dấu cách:

SELECT ArtistId, ArtistName 
FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') 
ON value = ArtistId;

Kết quả:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Mức độ tương thích

Lưu ý rằng STRING_SPLIT() chỉ khả dụng trên cơ sở dữ liệu có mức độ tương thích từ 130 trở lên. Bạn có thể thay đổi mức độ tương thích của cơ sở dữ liệu bằng câu lệnh sau:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Hoặc để đưa nó lên cấp SQL Server 2017:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Nơi MyDatabase là tên của cơ sở dữ liệu.

Ngoài ra, hãy xem Cách kiểm tra mức độ tương thích của cơ sở dữ liệu trong SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phân tích dữ liệu QuickBooks trong Dundas BI

  2. SQL GIỮA-Các mẹo thông minh để quét tìm một loạt các giá trị

  3. Sai lầm sơ đồ ER thường gặp

  4. Giới thiệu về xử lý không đồng bộ với Service Broker

  5. Cách kết hợp kết quả của hai truy vấn trong SQL