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

Cột không tồn tại trong mệnh đề IN, nhưng SQL chạy

Điều này sẽ hoạt động nếu một bảng ở bên ngoài truy vấn có một cột tên đó. Điều này là do tên cột từ truy vấn bên ngoài có sẵn cho truy vấn con và bạn có thể cố ý chọn một cột truy vấn bên ngoài trong danh sách CHỌN truy vấn con của mình.

Ví dụ:

CREATE TABLE #test_main (colA integer) 
CREATE TABLE #test_sub (colB integer)

-- Works, because colA is available to the sub-query from the outer query. However,
-- it's probably not what you intended to do:
SELECT * FROM #test_main WHERE colA IN (SELECT colA FROM #test_sub)

-- Doesn't work, because colC is nowhere in either query
SELECT * FROM #test_main WHERE colA IN (SELECT colC FROM #test_sub)

Như Damien quan sát, cách an toàn nhất để bảo vệ bạn khỏi "gotcha" không quá rõ ràng này là tập thói quen định tính tên cột của bạn trong truy vấn con:

-- Doesn't work, because colA is not in table #test_sub, so at least you get
-- notified that what you were trying to do doesn't make sense.
SELECT * FROM #test_main WHERE colA IN (SELECT #test_sub.colA FROM #test_sub)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn truy vấn trong Hàm SQL

  2. Làm cách nào để xóa khoảng trắng không ngắt khỏi cột trong máy chủ SQL?

  3. Để chạy gói SSIS bên ngoài Công cụ Dữ liệu Máy chủ SQL, bạn phải cài đặt Di chuyển Tệp vào Lưu trữ Dịch vụ Tích hợp hoặc cao hơn

  4. Sắp xếp chữ và số

  5. Người dùng đã đăng nhập sẽ bị đăng xuất sau một thời gian