0

次のようなSQL文があります。

SELECT a.status_id,
       (SELECT batch_name
        FROM   pf_req_batch
        WHERE  batch_id = (SELECT batch_id
                           FROM   pf_m_req_batch
                           WHERE  request_id = 282)) AS BATCH_NAME
FROM   pf_request
WHERE  request_id = 282; 

JOIN を使用して変換する必要があります。助けてください!

4

5 に答える 5

0

pf_m_req_batchテーブルがジャンクション テーブルであり、組み合わせが一意であると仮定すると、次の(request_id, batch_id)ようになります。

SELECT r.status_id,
       b.batch_name
FROM   pf_request  r
  LEFT JOIN pf_m_req_batch  rb
    ON rb.request_id = r.request_id
  LEFT JOIN pf_req_batch  b
    ON rb.batch_id = b.batch_id 
WHERE  r.request_id = 282 ; 

それが一意でない場合 (可能性が高い)、このクエリは、リクエスト 282 に関連付けられたバッチごとに 1 つずつ、多くの行を表示しますが、クエリはエラーをスローします。

于 2013-05-15T11:53:45.640 に答える
0

これを試すことができます:

SELECT R.STATUS_ID, B.BATCH_NAME
FROM PF_REQUEST R
INNER JOIN PF_REQ_BATCH B ON B.BATCH_ID = R.PF_M_REQ_BATCH.BATCH_ID
WHERE REQUEST_ID=282;
于 2013-05-15T11:19:22.203 に答える
0
    SELECT PR.STATUS_ID, PRB.BATCH_NAME as BATCH_NAME 
        FROM PF_REQ_BATCH PRB, PF_M_REQ_BATCH PMRB,PF_REQUEST PR 
        WHERE PRB.BATCH_ID = PMRB.BATCH_ID 
        AND PMRB.REQUEST_ID = PR.REQUEST_ID 
        AND PR.REQUEST_ID=282;
于 2013-05-15T11:21:13.620 に答える
0
SELECT A.STATUS_ID, b.BATCH_NAME  
FROM PF_REQUEST A  inner join PF_REQ_BATCH as b
on A.Batch_ID = b.Batch_Id
    WHERE A.REQUEST_ID=282;
于 2013-05-15T11:21:18.823 に答える
0

3 つのテーブルが関係しています。しかし、と の両方にあるpf_req_batchので必要ないようです。request_idpf_requestpf_m_req_batch

このコードはbatch_namepf_m_req_batchテーブル内を検索しています。結合を行う 1 つの方法を次に示します。

select r.status_id
from pf_request r left outer join
     pf_req_batch rb
     on r.request_id = rb.request_id 
where r.request_id = 282;

の使用に注意してくださいleft outer join。元のデータは、一致するすべてのレコードを から保持しpf_requestます。この構造は重複を生成する可能性があります ( に複数の一致する行がある場合pf_m_req_batch。ただし、元のクエリに基づいて、これは発生しないはずです。発生した場合、サブクエリ エラー (複数の行を返すサブクエリのようなもの) が発生します)。 .

于 2013-05-15T11:27:04.897 に答える