我有两个表项目和代码。代码表具有项目表的引用,具有从项目到代码的一对多关系。现在我的要求是通过该项目的代码表中第一条记录的标签来获取所有项目数据顺序
例如,如果我的项目表有以下数据:
PROJECT_ID PROJECT_NAME PROJECT_TYPE
1 a test1
2 b test2
代码表有下面提到的数据,其中project_id是外键然后我应该首先得到项目id 2,然后是项目id,第一个映射值包含标签d,对于项目id 2,它是a' s。我无法找到解决方案。
ID PROJECT_ID LABEL
1 1 d
2 1 b
3 1 c
4 2 a
期望的输出
PROJECT_ID PROJECT_NAME PROJECT_TYPE
2 b test2
1 a test1
答案 0 :(得分:0)
您的短语“首次匹配”含糊不清 - 可以参考代码表中LABEL
或ID
的排序。假设第一个替代方案,按标签排序,那么类似下面的内容应按所需顺序生成项目数据。
select p.*
from project as p
inner join (
select project_id, min(label) as lbl
from code
group by project_id
) as c on c.project_id=p.project_id
order by c.lbl;
如果您需要按ID
排序,只需相应修改子查询和ORDER BY
子句。
答案 1 :(得分:0)
由于没有与第一次匹配的聚合函数匹配,因此需要进行两次连接:首先查找第一次出现的代码id,然后再找到另一次获取该事件的标签值,以便正确排序:
SELECT p.*
FROM PROJECT p
JOIN (SELECT MIN(ID) AS ID, PROJECT_ID
FROM code
GROUP BY PROJECT_ID) AS findFirst
ON findFirst.PROJECT_ID = p.PROJECT_ID
JOIN code c ON findFirst.ID = c.ID
ORDER BY c.LABEL