2013-10-28 97 views
0

我被這個查詢卡住了,我無法解決它。請在連接表格時提供幫助。聯合表/聯接查詢MySql

我有4個表(客戶,產品,狀態和報價)。

我想根據客戶ID從這些表中讀取。

在前3個表格中,針對客戶ID的記錄數是1,但報價表可能有多個客戶的行。

我想從每個客戶的報價表中讀取最新的行。我無法對這種情況進行查詢。

例如

客戶有柱(CID,名字,姓氏) 狀態(SID,CID,狀態,SDATE) 地址(即AdID,CID,Addetail) 優惠(ID,CID,報價,offDate )

這是我的查詢,這是行不通的。 PS:我知道也有類似的問題,但我根據自己的情況無法做出映射。 使用Max,只返回一行(即使有很多客戶)。

回答

0

試試這個

SELECT c.ID, 
c.NAME, 
c.SURNAME, 
st.ID, 
st.Status, 
st.Sdate 
ad.Addetial, 
off.OffDATE 
FROM customer c 
WHERE 
INNER JOIN address ad ON c.ID=ad.cID 
INNER JOIN status st ON AND c.ID=st.cID 
INNER JOIN (SELECT *,MAX(id) AS `max` FROM offer GROUP BY id ,cID) off 
ON c.ID = off.cID 

我使用了一個子查詢(SELECT *,MAX(id) AS max FROM offer GROUP BY id ,cID)以獲取最新的客戶提供子查詢將只執行一次,以獲得所需的最新數據集

+0

三江源dianuj .. :) – Adil

0

你想要groupwise maximum,能夠獲得通過加入offer表自身的分組版本:

SELECT c.ID, 
     c.NAME, 
     c.SURNAME, 
     st.ID, 
     st.Status, 
     st.Sdate 
     ad.Addetial, 
     off.OffDATE 
FROM customer c 
    JOIN address ad ON ad.cID = c.ID 
    JOIN status st ON st.cID = c.ID 
    JOIN (offer off NATURAL JOIN (
     SELECT cID, MAX(OffDATE) OffDATE 
     FROM  offer 
     GROUP BY cID 
     ) t) ON off.cID = c.ID 
+0

謝謝eggyal ... :) – Adil