如何通过引用表的第一个匹配引用值从引用表中获取数据?

时间:2017-08-11 17:26:50

标签: sql

我有两个表项目和代码。代码表具有项目表的引用,具有从项目到代码的一对多关系。现在我的要求是通过该项目的代码表中第一条记录的标签来获取所有项目数据顺序

例如,如果我的项目表有以下数据:

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

2 个答案:

答案 0 :(得分:0)

您的短语“首次匹配”含糊不清 - 可以参考代码表中LABELID的排序。假设第一个替代方案,按标签排序,那么类似下面的内容应按所需顺序生成项目数据。

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