2012-03-22 254 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.id = 22而不是order.cid, order.vendid我希望他們的名字存在於聯繫人表中。

上面帶有customer = vendor = NULL

回答

3

好的查詢結果。由於您正在設置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

這聽起來像在這裏你真正想要兩個獨立的連接到聯繫人表,一個是客戶,一個用於供應商,這也有助於讓你的表的別名更有意義,以避免混淆:

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