delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)
它执行得很好(后来我发现整个照片表都是空的)
但奇怪的是:没有田野hs_id在HotelSupplier中,它被称为hs_key!
所以当我执行最后一部分
select hs_id from HotelSupplier where id = 142
单独地(用鼠标选择查询的那一部分并按F5),我会得到一个错误,但是当我在in条款,没有!
我想知道这是否正常的行为?
交互式爱情
浏览 607回答 3
3回答
暮色呼如
它的价值hs_id从外部查询。如果查询中没有从所选表中投影任何列,则该查询是完全有效的。select名单。例如select 10 from HotelSupplier where id = 142返回的结果集与匹配的行数相同。where子句和价值10所有的行。非限定列引用是从最近的范围向外解析的,因此这只是作为一个相关的子查询来处理。此查询的结果将是从Photo哪里hs_id不为空,只要HotelSupplier至少有一行,其中id=142(因此子查询至少返回一行)如果你考虑一下这是什么效果的话,可能会更清楚一些。delete from Photo where Photo.hs_id in (select Photo.hs_id)这当然相当于delete from Photo where Photo.hs_id = Photo.hs_id顺便说一句,这是我个人在MicrosoftConnect上看到的最常见的“bug”。Erland Sommarskog把它包括在他的愿望清单为SET STRICT_CHECKS ON