2012-03-22 16 views
0

は、ここに私のクエリMYSQLクエリ左参加

select t1.*, t2.name as customer, t2.name as vendor from order t1 
left join contact t2 
on t2.id = t1.cid and t2.id = t1.vendid 
where t1.id = 22 
  • contact_Table => ID、名前
  • ORDER_TABLE => ID、ORDERNAMEは、CID、vendid

私の問題は、私が欲しいですオーダーを選択するにはorder.cid, order.vendidの代わりにorder.id = 22の代わりにコンタクトテーブルに存在する名前が必要です。 customer = vendor = NULL

答えて

3

[OK]をクリックして、クエリ結果の上

。クエリは、t2.id = t1.cid and t2.id=t1.vendid、またはt2.id = t1.cid = t1.vendidを設定しているため、customer = vendor = nullとなります。私は注文が同じベンダーと顧客IDを持っているとは思えないので、あなたのクエリはうまく動作しません。

SELECT t1.*, t2.name as cust, t3.name as vendor 
FROM order t1 
LEFT JOIN contact t2 ON (t2.id=t1.cid) 
LEFT JOIN contact t3 on (t3.id=t1.vendid) 
WHERE t1.id=22 

顧客情報を取得するために、連絡先テーブル、そのうちの一つで二度リンクこの方法で、もう1つは、ベンダーの情報を取得する:

はこれを試してみてください。

1

それはあなたが実際に別の2は、連絡先テーブルに顧客のための1とベンダーのための1つに参加したいように、それはまた、混乱を避けるために、あなたのテーブルの別名がより有意義にするために役立ちますここに聞こえる:

SELECT o.*, c.name as customer, v.name as vendor 
FROM order o 
LEFT JOIN contact c on (c.id = o.cid) 
LEFT JOIN contact v ON (v.id = o.vendid) 
WHERE o.id = 22