Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kolom tidak ada dalam klausa IN, tetapi SQL berjalan

Ini akan berfungsi jika tabel di luar kueri memiliki kolom dengan nama itu. Ini karena nama kolom dari kueri luar tersedia untuk subkueri, dan Anda mungkin sengaja memilih kolom kueri luar dalam daftar PILIH subkueri Anda.

Misalnya:

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)

Seperti yang diamati Damien, cara teraman untuk melindungi diri Anda dari "gotcha" yang tidak terlalu mencolok ini adalah dengan membiasakan mengkualifikasikan nama kolom Anda di subquery:

-- 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. Cara terhubung ke SQL Server dengan otentikasi windows dari Node.JS menggunakan modul mssql

  2. Baca char, double, int pattern dari string di sql

  3. Penyembunyian Data Dinamis di SQL Server untuk pemula

  4. Cara membuat kueri dari tabel hierarki anak induk

  5. Klausa Check-in Bersyarat di mana