繁体   English   中英

合并表/联接查询MySql

[英]Combine Tables / Join Query MySql

我对此查询感到困惑,无法解决它。 我在连接表时需要帮助。

我有4个表格(客户,产品,状态和报价)。

我想根据客户ID从这些表中读取。

在前3个表中,针对客户ID的记录数为1,但是要约表对于客户而言可能有多于一行。

我想从报价表中为每个客户阅读最新行。 我无法查询这种情况。

例如

Customer have columns (cID, Name, Surname)
STATUS (sID, cID, Status, Sdate)
ADDRESS (adID, cID, Addetail)
Offer (ID, cID, offer, offDate)

这是我的查询,不起作用:

SELECT c.ID, 
c.NAME, 
c.SURNAME, 
st.ID, 
st.Status, 
st.Sdate
ad.Addetial,
off.OffDATE
FROM customer c, address ad, status st, offer of

WHERE 
c.ID=ad.cID 
AND c.ID=st.cID 
AND c.ID = off.cID
.. 

我很困惑如何将选择范围限制为要约表中的一行。 因为如果我输入c.ID = off.cID,那么它将返回我不需要的所有报价。

PS:我知道也有类似的问题,但是我无法根据自己的情况进行映射。 使用Max,仅返回一行(即使有很多客户)。

试试这个

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)来获取最新的客户要约子查询将仅执行一次以获取所需的最新数据集

您需要成组的最大值 ,可以通过将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM