我在解决postgresql实习练习时遇到问题使用两个不同的表

svmlkihl  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(263)

更重要的是,我申请了一个使用postgresql的实习,在几个月前刚刚开学之前,我从未接触过编程语言。雇主给我发了一封电子邮件,里面有一些练习,我必须在星期一之前完成。我有三天的时间来学习语言并解决这些练习。我已经学习了一整天,大约14个小时(真的)。我已经习惯了postgresql,但有一件事我正在努力。因为我是一个非常新的编程,我没有足够的时间来做非常具体的搜索,我没有其他选择,但要求你们。
问题来了。我在两个表上都有相同的“id\u cliente”列。我需要显示一个表格,其中显示所有人的姓名,身份证和多少电影,他们每个人从出租借用。
我试过两种不同的代码,但都不起作用。

select en_cliente.id_cliente, nome, count(en_aluguel.id_cliente) as alugueis
from en_cliente, en_aluguel
where en_cliente.id_cliente=en_aluguel.id_cliente
group by en_cliente.id_cliente;

这让玛丽亚失踪了(因为她的身份证没有出现在第一张table上)。应该显示零
也:

select en_cliente.id_cliente, nome, count(en_aluguel.id_cliente) as alugueis
from en_cliente, en_aluguel
group by en_cliente.id_cliente;

它使最后一列(id为alugueis)的每个值都成为“7”
谢谢!


mklgxw1f

mklgxw1f1#

两件事:
每当from行中有两个表时,都在进行内部联接,这要求两个表上的行都匹配。
每当where子句中有条件时,只会返回与之匹配的行,这同样会限制您在两个表中都有包含该子句的记录。
您需要左联接,它允许您从存在的记录转到可能存在或不存在的记录。
试试这个。它将从您的en\u cliente表开始,并将加入en\u aluguel表中的记录,即使en\u aluguel中没有匹配项。

select en_cliente.id_cliente, nome, count(en_aluguel.id_cliente) as alugueis
from en_cliente
left join en_aluguel on (en_cliente.id_cliente=en_aluguel.id_cliente)
group by en_cliente.id_cliente;

注意:如果您将我的示例中的单词“left”改为“inner”,您将得到与第一个示例完全相同的代码(只是语法不同)。

相关问题