我有一个用户表和一个电子签名表-我希望能够显示给定文档的签名者和未签名者。
让我们说我们有员工:
EID Name
1 Bob
2 Tom
3 Fred
签名:
EID Document Signature
1 1 Bob
1 2 Bob
1 3 Bob
2 1 Tom
3 2 Fred
我的问题是我可以使它对文档4正常工作-因为没有人签名,所以我可以查看文档为空的地方
但是,例如,如果我寻找2号文件,那么我目前正使员工错过这份清单
我想看的文件2
EID Signature
1 Bob
2
3 Fred
对于文档4,我想查看:
EID Signature
1
2
3
和文件1:
EID Signature
1 Bob
2 Tom
3
我尝试使用的查询是:
SELECT e.eid, s.signature
from employees e
left join signatures s on e.eid=s.eid
where s.document=? or s.document IS NULL group by e.eid
答案 0 :(得分:1)
有多个问题:
Left Join
时,右侧表上的任何Where
条件都应放在On
子句中。否则,即使没有匹配的行,它也会过滤您的结果集(失去Left Join
的目的)/ null
的值,我们使用IS NULL
。 = null
不起作用。在这种情况下,如果将条件转移到On
子句,我们也不需要检查null
的值。Group By
的使用无效,实际上不是必需的。使用Group By
时,Group By
中只能有聚合列或在Select
中指定的列。请参阅:https://stackoverflow.com/a/41887524/2469308 请尝试以下操作:
SELECT e.eid, s.signature
FROM employees e
LEFT JOIN signatures s
ON e.eid=s.eid AND
s.document = ?