sql >> Database teknologi >  >> RDS >> Sqlserver

Kolonne findes ikke i IN-sætningen, men SQL kører

Dette vil fungere, hvis en tabel i den ydre forespørgslen har en kolonne med det navn. Dette skyldes, at kolonnenavne fra den ydre forespørgsel er tilgængelige for underforespørgslen, og du kan bevidst mene at vælge en ydre forespørgselskolonne i din underforespørgsel SELECT-liste.

For eksempel:

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)

Som Damien bemærker, er den sikreste måde at beskytte dig selv mod denne ikke alt for indlysende "gotcha" ved at vænne dig til at kvalificere dine kolonnenavne i underforespørgslen:

-- 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. Hent alle overordnede/underordnede poster fra databasen på Laravel (hierarkiske data)

  2. Fremmednøgle til et af mange borde?

  3. Begrænsning af indre forespørgsel med ydre forespørgselsattribut

  4. PostgisDialect vs PostgreSQLDialect eller begge dele?