0

次のことが必要な SQL ステートメントを作成しています。

  1. 特定の数の仕事を探す
  2. そのジョブを別のテーブルに一致させる
  3. 結果を表示する

これは私が現在持っているものです。

select * from PreviousJobs pj, Jobs j where jobId = '273121' 
AND where (pj.sOtherRef = j.sOtherRef) = True    

うーん

4

3 に答える 3

4

入れ子にする必要はありません。必要なのは単純な 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 に関する情報を含めることをお勧めします。

于 2012-05-23T03:42:17.380 に答える
4

=True や 2 番目の where は必要ありません。

ただ

select * from PreviousJobs pj, Jobs j where jobId = '273121' 
AND pj.sOtherRef = j.sOtherRef 
于 2012-05-23T03:18:57.160 に答える
1
  1. 特定の番号のジョブを探します:ここで、jobId = '273121'
  2. そのジョブを別のテーブルに一致させます:pj.sOtherRef=j.sOtherRefの内部結合
  3. 結果を表示する:PreviousJobspjから*を選択します

クエリは次のようになります。

select *
  from PreviousJobs pj inner join Jobs j ON pj.sOtherRef = j.sOtherRef
 where j.jobId = '273121'
于 2012-05-23T06:44:35.953 に答える