Mysql union选择错误

时间:2015-10-27 05:31:40

标签: mysql

我正在尝试显示来自 table1 的所有记录,即使 table2 中不存在catid table2 中的所有员工)应该使用 table1 中的所有catid,如果没有在 table2 中出现,则使用以下sql查询但是会出现错误

  

错误代码:1054。未知栏' catid'在'群组声明'

select empid,days from table2 union select catid from
table1 group by empid, catid;

表1:

catid
  1
  2
  3

表2:

empid catid days (computed column count(*))
1000    1    8
1000    3   10

预期结果:

empid  catid  days
1000    1    8
1000    2    0 <---catid 2 and days 0 if catid not existing in table2 for empid 1000
1000    3   10

4 个答案:

答案 0 :(得分:0)

这不是union语句的功能。 Union语句执行类似功能的设置,它合并了两组。您正在寻找的是与表1的连接,您可以通过catid进行计数和分组。实现此输出的数据模型本身就是错误的;)

select employeeid, catid, sum(days) from table1, table2 group by employeeid, catid;

答案 1 :(得分:0)

您只需LEFT JOIN

    Select tab2.empid, tab2.catid, ifnull(tab2.days, 0)
    from tab2 
    left join tab1 on tab2.catid = tab1.catid

请注意:在执行 UNION时,第一个选择中显示的列的数量和类型应与下一个选择相同。

因此,您需要先使选择列同步。

答案 2 :(得分:0)

你可以检查这个并同样添加 empid

SELECT TABLE1.CATID, IFNULL(TABLE2.DAYS,0) FROM table1 LEFT OUTER JOIN
table2 ON table1.catid = table2.catid

答案 3 :(得分:0)

请与IFNULL一起使用LEFT JOIN

Select table2.empid, table1.catid, IFNULL(table2.days, 0) from table2 
LEFT JOIN table1 ON table2.catid = table1.catid;