mysql - 从 2 联合 sql 语句中获取不同的记录

标签 mysql union distinct-values

想请教一些sql高手。

我编写了从 staff 和 alumni 表中获取作者姓名的 sql 语句。一些作者的名字将出现在两个表中。所以逻辑是,如果作者姓名在 staff 中,则使用它,否则查找 alumni 表。

这是我的 sql 语句,看起来不错,但它在 staff 和 alumni 表中显示了相同的作者姓名。

SELECT DISTINCT AP.Author_name, P.people_id, P.Name, P.Journal_name, AP.Author_sortorder FROM  `Paper_Author` AS AP LEFT JOIN  `People` AS P ON ( AP.Author_id = P.people_id )  WHERE AP.Paper_id =3838

UNION  

SELECT DISTINCT AN.Author_name, N.People_id, N.Name, N.Journal_name, AN.Author_sortorder FROM  `Paper_Author` AS AN LEFT JOIN  `Alumni` AS N ON ( AN.Author_id = N.People_id )  WHERE AN.Paper_id =3838 ORDER BY Author_sortorder LIMIT 0 , 30

结果:

people_id--  Author_name--  Journal_name--  
    1        Name1              A1          
    2        Name2              B1          
    3        Name3              C1
    3        Name3              C1
    4        Name4              D
    4        Name4

预期结果:

 people_id--  Author_name--  Journal_name--  
    1           Name1            A1          
    2           Name2            B1          
    3           Name3            C1
    4           Name4            D 

最佳答案

这可能可以通过使用原始结果作为子查询的附加选择来解决

SELECT DISTINCT * FROM (
    SELECT DISTINCT AP.Author_name, P.people_id, P.Name, P.Journal_name, AP.Author_sortorder FROM  `Paper_Author` AS AP LEFT JOIN  `People` AS P ON ( AP.Author_id = P.people_id )  WHERE AP.Paper_id =3838

    UNION  

    SELECT DISTINCT AN.Author_name, N.People_id, N.Name, N.Journal_name, AN.Author_sortorder FROM  `Paper_Author` AS AN LEFT JOIN  `Alumni` AS N ON ( AN.Author_id = N.People_id )  WHERE AN.Paper_id =3838 ORDER BY Author_sortorder LIMIT 0 , 30
);

关于mysql - 从 2 联合 sql 语句中获取不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47985704/

相关文章:

mysql - 删除select查询选择的记录

php - 如何解决mysqli_fetch_array()错误

mysql - 如何在MySQL中通过查询优化获得组合结果?

MySQL Workbench 错误代码 : 1074. 列长度对于列来说太大

arrays - 如何从 Typescript 中的数组获取不同的值

xml - 如何计算 XQuery 中不同值的每个实例?

mysql - 从MySQL中的两个 View 中选择而不留下记录

MySQL 加载数据文件错误(附有)

MySQL - 如何将列转为行?

xml - XPath 1.0:列出不同的值及其出现的次数