刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

サブクエリの動作の違い

今日はめずらしく、sawagani氏が教えを乞いにやってきました。
何でも、今ではマイナーなPervasiveSQLのv8で、サブクエリが期待通りにならないとの事。
コンバート結果の確認のためにプログラムを組むのも何なので、SQL文を発行して確認できれば有り難い。

なるほど。では、SQLServerで動作確認してみるわ。

SELECT * FROM 明細データ AS a
LEFT OUTER JOIN (SELECT DISTINCT id FROM 明細データ WHERE s_date >= '2001-10-01') AS b ON a.id = b.id
WHERE s_date >= '2001-10-01'

まあ、このクエリ自体にツッコミたい事はありますが、とにかく文法的にエラーはありません。
多分、期待通りの動作をしているのでしょう。

しかし、PervasiveSQLでは、この記述はエラーになります。
何か納得いかないので試行錯誤してたら、IN 句に記述することで動作しました。

SELECT * FROM 明細データ AS a
WHERE a.id IN (SELECT DISTINCT id FROM 明細データ AS b WHERE s_date > '2001-10-01') AND a.s_date >= '2001-10-01'

SQL文の記述として、どちらが自然なんだろう。