2013-10-28 44 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