次のことが必要な SQL ステートメントを作成しています。
- 特定の数の仕事を探す
- そのジョブを別のテーブルに一致させる
- 結果を表示する
これは私が現在持っているものです。
select * from PreviousJobs pj, Jobs j where jobId = '273121'
AND where (pj.sOtherRef = j.sOtherRef) = True
うーん
入れ子にする必要はありません。必要なのは単純な JOIN であり、明示的な結合表記を使用して記述するのが最適です。
SELECT cj.*, pj.*
FROM PreviousJobs AS pj
JOIN Jobs AS cj ON pj.sOtherRef = cj.sOtherRef
WHERE cj.jobId = '273121'
ステートメントに 2 番目の WHERE は必要ありません (これは構文エラーです。DBMS から出力されたエラー メッセージを提供する必要があります)。比較を TRUE と比較する必要はありません。
FROM 句のテーブル名のコンマ区切りリストは、SQL-86 および SQL-89 で必要でしたが、SQL-92 サポートが DBMS に追加されてからは必要ありません。古い SQL を読めるようになったら、それが何を意味するのかを理解できるように、それについて知っておく必要があります。ただし、職場の標準から古い表記法を使用するようにとの圧倒的な (そして賢明でない) 圧力がない限り、新しい JOIN 表記法のみを使用するように計画する必要があります。
使用している DBMS によっては、標準では問題ないとされていても、テーブル エイリアスの AS が許可されていない場合があります (Oracle)。このような違いがあるため、質問に DBMS に関する情報を含めることをお勧めします。
=True や 2 番目の where は必要ありません。
ただ
select * from PreviousJobs pj, Jobs j where jobId = '273121'
AND pj.sOtherRef = j.sOtherRef
クエリは次のようになります。
select *
from PreviousJobs pj inner join Jobs j ON pj.sOtherRef = j.sOtherRef
where j.jobId = '273121'