0

このクエリで立ち往生しており、解決できません。テーブルの結合について助けが必要です。

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
.. 

選択をオファー テーブルから 1 行に制限する方法がわかりません。c.ID = off.cID と入力すると、不要なすべてのオファーが返されるためです。

PS: 同様の質問があることは知っていますが、状況に応じてマッピングできませんでした。Max を使用すると、(多数の顧客がいる場合でも) 1 行のみが返されます。

4

2 に答える 2

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 回だけ実行され、目的の最新のデータセットを取得します

于 2013-10-28T19:26:44.760 に答える
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
于 2013-10-28T19:28:32.077 に答える