我遇到了这个问题,我无法解决。我需要帮助加入表格。
我有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,只返回一行(即使有很多客户)。答案 0 :(得分: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)
来获取最新的客户优惠子查询只执行一次以获得所需的最新数据集
答案 1 :(得分: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