クエリの例:
select *
from A join B on A.ID = B.SOMEVALUE
where A.VALUE="something" and
B.ID =
(select ID from B where SOMEVALUE = A.ID and
THISDATE = (select max(SOMEDATE) from B where ...))
したがって、SQL を読むことができる場合は、いくつかの相関サブクエリを実行して、結合の結果を絞り込んでいることがわかるはずです。(そして、はい、これはひどく単純化されています)。
特定のケースでは、サブクエリ:
select ID from B where SOMEVALUE = A.ID and
THISDATE = (select max(SOMEDATE) from B where ...)
複数の値を返すことができるため、エラーが発生します
「サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。」
私は完全に期待しています。これは明らかに良いことではなく、最初からこれらの重複がデータベースに入るのを (うまくいけば) 防止するコードを用意しています (つまり、テーブル Bには、
SOMEVALUE = A.ID and max(SOMEDATE)
ただし、エンドユーザーは、ソフトウェアを壊すために私が考えられない方法を見つける点で創造的であるとは言えません。
だから今私の質問に:
最初のサブクエリを次のように変更した方がよいでしょうか
select top 1 * from B ...
この状況が発生した場合/場合に (できれば決して) エラーが表示されないようにするか、エラーが発生するのを防ぎます。私は、トップステートメントを追加せずに、ユーザーに潜在的に間違ったデータを表示させるのではなく、エラーを通過させることに傾いています。このような状況でベスト プラクティスについて考えている人がいるかどうか疑問に思っています...