2011-07-27 15 views
1

だからここのシナリオは、私は2つのテーブルのフィールドは、SQLに参加

  • payment_date, payment_amount, payment_party_code

receipt_date, receipt_amount, receipt_party_code. 同様

  • paymentreceiptを言っているのです

    私は支払いテーブルに4行、領収書テーブルに11行あります。

    私がしたいことはpaymentからreceiptテーブルのparty_codeのすべての行を選択することです。私は左外部結合を使って行ったが、データのデカルト積を行っているので失敗した。

    この

    おかげで私を助けてください

+2

正確なコードが不完全であっても、それを投稿することはよくあります。問題は、正確な相違点を強調するために、自分のものと非常によく似た正しい解決策で回答を得ることができ、その意味では、あなたの間違いをより明確にする可能性があります。今は重要ではないかもしれませんが、将来のことを念頭に置いておきたいかもしれません。 –

答えて

1

あなたがそれにJOIN条件LEFT OUTER JOINを使用して定義する必要があります。

SELECT 
    p.payment_date, p.payment_amount, p.payment_party_code, 
    r.receipt_date, r.receipt_amount, r.receipt_party_code 
FROM 
    dbo.Payment p 
LEFT OUTER JOIN 
    dbo.Receipt r ON p.payment_party_code = r.receipt_party_code 

これは、SQL Server(T-SQL)のためであります。 JOIN条件(ON p.payment_party_code = r.receipt_party_code部分)を省略すると、デカルト積が得られます。

Paymentテーブルのすべての行が表示され、Receiptテーブルに情報がある場合は、そのテーブルも表示されます。

あなたが反対(該当する行がそれをPaymentにありません場合でもReceiptからすべてを、)したい場合は、あなたが(Receipt最初から選択)FROM ... LEFT OUTER JOINにテーブルの周りに切り替えるためにいずれかの必要がある、またはあなたが使用する必要がありますRIGHT OUTER JOINですので、Receiptからすべてを取得します。

あなたはジェフ・アトウッドによって投稿Venn diagrams of SQL JOINsで見たいと思うかもしれません - 異なるJOINの種類が本当に何をすべきか、それは非常に明確になります...

2

あなたはpayment_party_codeに一致するレコードだけをしたい場合は、使用する必要があります"INNER JOIN"です。しかし、marc_sが述べたように、あなたはあなたの "ON"節にあなたの結合条件を指定する必要があります。

+0

+1インナー・ジョインを指しています。 – sayap

0
select * 
from party p 
left outer join receipt r on p.party_code = r.party_code 
+1

コード、XML、またはデータサンプルを投稿する場合は、テキストエディタでこれらの行を強調表示し、エディタツールバーの「コードサンプル」ボタン(「{}」)をクリックして、フォーマットして構文を強調表示してください! –

0

Left Outer Join

左外側は論理演算子に参加第二(下部)の入力に最初(一番上)の入力の結合を満足する各行を返します。また、2番目の入力に一致する行がなかった最初の入力からの行も戻します。 2番目の入力の一致しない行は、NULL値として戻されます。引数の列に結合述語がない場合、各行は一致する行です

SELECT 
    pay.payment_date, pay.payment_amount, pay.payment_party_code, 
    rec.receipt_date, rec.receipt_amount, rec.receipt_party_code 
FROM 
    payment pay 
LEFT OUTER JOIN 
    receipt rec ON pay.payment_party_code = rec.receipt_party_code