所以有些人说1是错的,因为B.bid除了之外是不可访问的,我们之后不能使用它,因为这会给编译器错误
但我没有得到它,所以我们不能使用B.bid之后,但我们可以在存在后使用它?为什么呢?
哪一个是正确的查询?
答案 0 :(得分:1)
查询1存在一些问题。
首先,为什么它会尾随))
?要么他们不应该在那里,要么在其他地方有一些(
。
其次,EXCEPT
的展示位置错误。
这个例子是......
SELECT sname FROM ... WHERE NOT EXISTS (...)
EXCEPT
SELECT bid FROM ...
但看起来,由于某些原因,希望成为......
SELECT sname FROM ... WHERE NOT EXISTS (SELECT bid FROM ...
EXCEPT
SELECT bid FROM ...
)
(它当前与主查询“不同”,而不是来自WHERE子句中的子查询。移动括号内的EXCEPT
可以修复它。)
NOT EXISTS (SELECT bid FROM boats B
EXCEPT
SELECT bid FROM reservations R WHERE R.bid = B.bid AND R.sid = S.sid
)
不幸的是,EXCEPT
中的一个查询无法引用另一个查询。
R.sid = S.sid
很好,因为这是一个内部查询引用和外部查询。 (那些被称为“相关”子查询 - 在某种意义上,整个相关子查询重复执行,外部查询中的每一行一次。)
但是R.bid = B.bid
是“乱码”,因为reservations
中的行完全独立于boats
中的行进行处理。