2017-09-27 4 views
0

のJOIN:PostgreSQLは私は2つのpostgresのテーブルを持っている複数の条件で

worker_details_verification (verification_id BIGSERIAL, worker_id BIGINT, 
state TEXT, proofs TEXT[]) 
worker_details(worker_id BIGINT, name TEXT) 

は今、私は他に今、レコード `状態= '初期'

を制限

`verification_id, worker_id, proofs FROM` the table 
    `worker_details_verification` 

を取得したいです上記の3つの列は、私もworker_detailsテーブルから名前の列を希望します。ここでworker_idを使用して作業者の名前を問い合わせることができます。

次のクエリを試しましたが、動作しませんでした。

SELECT a.verification_id, a.worker_id, a.state, a.proofs, b.Name FROM 
worker_details_verification a FULL OUTER JOIN worker_details b ON 
a.worker_id = b.worker_id AND a.state = 'Initial'; 

それもa.stateが'Initial'ではなく、またworker_detailからすべてnameworker_details_verification列についてNULLで返されるいくつかの誤ったレコードがレコードを返します。

+0

/blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – xQbert

答えて

0

は、それは私に聞こえる完全外部結合ではなく、あなたがしたいと思うその左/あなたがWorker_Details_Verificationからのデータを探していると、該当する場合にもWorker_Detailsをつかむながら、それをフィルタリングするために右以来。

私はこれ取っ:

SELECT a.verification_id, a.worker_id, a.state, a.proofs, b.Name 
FROM worker_details_verification a 
    FULL OUTER JOIN worker_details b ON a.worker_id = b.worker_id AND a.state = 'Initial'; 

をそして、これにそれを作った:外側フルINNER <左、右を、クロスが参加します。https:/参加し、異なるタイプの上に読む

SELECT a.verification_id, a.worker_id, a.state, a.proofs, b.Name 
FROM worker_details_verification a 
    LEFT OUTER JOIN worker_details b ON a.worker_id = b.worker_id 
WHERE a.state = 'Initial'; 
+0

両方の答えが機能します(INNER JOINとFULL OUTER JOIN)。どちらか一方を選択するために使用できる要因(パフォーマンスなど)はありますか? –

+0

データがどのように関連しているかに基づいてアプローチします。 Worker_DetailsにWorker_Details_VerificationにあるWorker_Idsが欠落していないことがわかっている場合、私は内部結合を選択します。不確実性がある場合は、外部結合(左または右)を使用します。私は自分のキャリアにフルアウタージョイントを必要とした1つの特定の時間だけ考えることができます。 –

+0

oops。私は「LEFT OUTER JOIN(あなたの答え)」とINNER JOIN(もう一つの答え)という意味でした。 「完全な外部結合」(私が間違って入力したもの)ではありません。 –

0

あなたはこれを試しましたか?

SELECT a.verification_id, a.worker_id, a.state, a.proofs, b.Name 
FROM worker_details_verification a 
INNER JOIN worker_details b ON a.worker_id = b.worker_id 
WHERE a.state = 'Initial'; 
+0

両方の答えが機能します(INNER JOINとFULL OUTER JOIN)。どちらか一方を選択するために使用できる要因(パフォーマンスなど)はありますか? –

関連する問題