我正在尝试显示来自 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
答案 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;