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

Cách chọn bản ghi không tồn tại trong Sql Server

Bạn có thể thực hiện việc này với CTE . Một cái gì đó như thế này:

DECLARE @startDate datetime = '2/1/2014'
DECLARE @endDate datetime = '2/6/2014'

;WITH DateRange(RunningDate) AS
(
    SELECT @startDate AS RunningDate
    UNION ALL
    SELECT RunningDate + 1
    FROM DateRange
    WHERE RunningDate < @endDate
)

SELECT id, RunningDate date, value1, value2 
FROM DateRange LEFT JOIN myTable ON myTable.date = DateRange.RunningDate

Chỉnh sửa ... NẾU bạn đồng ý với giải pháp này (lưu ý nhận xét của Aaron Bertrand dưới câu trả lời của tôi), hãy lưu ý rằng bạn cũng sẽ phải chỉ định đệ quy tối đa nếu bạn có ý định giao dịch với phạm vi lớn hơn 3 tháng. Giá trị mặc định được đặt thành 100. Điều này có nghĩa là khi truy vấn hiện đang được viết, nó sẽ chỉ thực hiện tối đa 101 ngày (100 mức đệ quy).

Ngoài ra, bạn có thể chỉ định OPTION (MAXRECURSION 0) ở cuối SELECT cuối cùng để khắc phục điều này. 0 có nghĩa là mức đệ quy vô hạn. Nhưng một lần nữa, hãy lưu ý đến bài đăng của Aaron.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Biểu thức bảng thông thường, tại sao lại có dấu chấm phẩy?

  2. Tìm những từ mà một tập hợp các chữ cái có thể tạo ra?

  3. Vòng lặp kích hoạt máy chủ SQL

  4. @@ SERVICENAME trong SQL Server là gì?

  5. Tránh bế tắc SQL với điều chỉnh truy vấn:Lời khuyên từ Brent Ozar