0

人々が左の結合内で注文する必要がある場合がたくさんあります.私は現在、たとえば一連のユーザーから最新の求人情報を見つけようとしています.残念ながら、それを実行することはできません.現在持っているものは次のとおりです。

select * from `Profiles`
left join (select  isPrimary, startDate, Orgs.`orgName`, Orgs.`title` from        
Orgs order by isPrimary ) job  on 
`Profiles`.`ID` = Orgs.`ID` 
group by `Profiles`.`ID`
 limit 0,2

私はここに近いと思いますが、誰か洞察を提供できますか?

4

3 に答える 3

2

ここで副選択を使用する理由 それだけではない理由:

SELECT p.*, o.isPrimary, o.startDate, o.orgname, o.title FROM `Profiles` AS p
LEFT JOIN `Orgs` AS o
  ON p.ID = o.ID    
GROUP BY p.ID
ORDER BY p.ID, o.isPrimary
LIMIT 0,2
于 2013-09-16T17:15:57.727 に答える
1

mysql にはランキング機能がないため、古い従来の方法を使用する必要があります。これでは、必要なデータを集計する派生テーブルを作成し、テーブル全体に結合して他のフィールドを取得します。

SELECT p.[define fields here, never use select * in production code], o3.isPrimary, o3.startDate, o3.orgname, o3.title 
FROM `Profiles` AS p
LEFT JOIN 
    (SELECT O.Id, o.isPrimary, o.startDate, o.orgname, o.title 
    FROM  `Orgs` as o
    JOIN (SELECT ID, MAX(Startdate) as Startdate FROM   `Orgs` GROUP BY ID) AS o2
      ON o.ID = o2.id and o.startdate = o2.startdate) as 03
ORDER BY p.ID, o3.isPrimary

outergroup by または limit 句が必要だとは思いませんが、確実に結果セットを確認する必要があります。最大の問題は、同じ ID と開始日を持つレコードが複数ある場合です。その場合、一意性を得るために別のフィールドでも集計する必要があります。

于 2013-09-16T17:52:32.370 に答える