2016-07-06 4 views
1

この設定は、1人の債務者の複数の住所用です。私は注文テーブルに債務者のための2つのフィールドを持っています。債務者テーブルの「デフォルト」の値については、debiteur_idを参照してください。同じ債務者の別のアドレスを選択すると、debiteur_idはnullになり、aditional_idは債務者にリンクされているaditional_debiteurの値で埋められます。私は誰かがそれを得ることを望む。同じテーブルと経由テーブルから選択して1つの結果セットにする

私のテーブル:私が欲しいもの

Order 
id debiteur_id amount aditional_id 
1 null  2  1 
2 1   3  null 
3 2   1  null 

debtor 
id name   hnr place 
1 myname  10 london 
2 companyName 4 Enschede 

Aditional_debiteur 
id debiteur_id hnr place 
1 1   22 amsterdam 

は、債務者のテーブルからIDにリンクされているすべての注文(直接またはinderict)を取得することです。これは、注文が同じ会社からのもので、別のアドレスがあるためです。私はIDが1のdeborを選択した場合 私はこの順序の結果を得る:

order_id name amount 
1  myname 2 
2  myname 3 

債務者IDを2と別の結果:

SELECT * FROM `Order` WHERE `debiteur_id` = '1' ORDER BY `id` ASC 

この:

order_id name   amount 
3  companyName 1 

私はこのクエリを持っていますデフォルトの債務者住所で結果を返します。私はaditional_idで他の注文を取得したいと思います(債務者とdebituer_id)もあります。

ロングストーリー。私は、債務者テーブルから特定の債務者と注文テーブルからすべての注文を取得したい。

+0

私はそれを得ると思いますが、あなたのサンプルデータに基づいて期待される結果を表示する方法について – Matt

+0

@Matt私は1つの結果を追加しました。しかしもう一つ追加します。 – da1lbi3

+0

あなたのナレーションから希望の結果であることが分かりませんでした – Matt

答えて

2
SELECT 
    o.id AS order_id 
    ,d.name 
    ,o.amount 
    ,IFNULL(ad.hnr,d.hnr) AS hnr 
FROM 
    `Order` o 
    LEFT JOIN Additional_debiteur ad 
    ON o.aditional_id = ad.id 
    AND ad.debiteur_id = 1 
    INNER JOIN debtor d 
    ON IFNULL(o.debiteur_id,ad.debiteur_id) = d.id 
WHERE 
    o.debiteur_id = 1 
    OR ad.id IS NOT NULL 
ORDER BY 
    o.id ASC 

これを行う方法が1つあります。

+0

すごくありがとう!それは素晴らしい質問です!もう1つ質問してもいいですか? – da1lbi3

+0

フォローアップは何ですか? – Matt

+0

選択にhnrと場所を取得するにはどうすればよいですか?異なるテーブルから来なければならないからです。 – da1lbi3

0

ORはほしいですか?

SELECT o.* 
FROM `Order` o 
WHERE 1 IN (debiteur_id, aditional_id) 
ORDER BY id ASC 

注:IDが数値の場合、値には一重引用符を使用しないでください。私はIDが実際に数値であると仮定しています。

+0

aditional_idは、Aditional_debiteur テーブルの行IDです。私はAditional_debiteurが必要です。 debiteur_idそれは正しいです。 – da1lbi3

関連する問題