sql >> Database >  >> RDS >> Sqlserver

Kolom bestaat niet in de IN-component, maar SQL wordt uitgevoerd

Dit werkt als een tabel in de buitenste query heeft een kolom met die naam. Dit komt omdat kolomnamen van de buitenste query beschikbaar zijn voor de subquery, en het kan zijn dat u opzettelijk een buitenste querykolom wilt selecteren in uw subquery SELECT-lijst.

Bijvoorbeeld:

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)

Zoals Damien opmerkt, is de veiligste manier om jezelf te beschermen tegen deze niet al te voor de hand liggende "gotcha" de gewoonte aan te nemen om je kolomnamen in de subquery te kwalificeren:

-- 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. PHP-vervaldatum

  2. T-SQL:alle dubbele rijen verwijderen, maar er één behouden

  3. Aangepast inlogscherm maken in Oracle Forms 10g

  4. gegevens in één rij weergeven (uit meerdere rijen)