У меня возникли проблемы с выполнением упражнения Internship postgresql.Использование двух разных таблиц - PullRequest
0 голосов
/ 06 октября 2018

Что случилось, я подал заявку на стажировку, которая использует postgresql, у меня никогда не было никаких контактов с языком программирования, пока университет не начал работать всего пару месяцев назад.Работодатель прислал мне электронное письмо с некоторыми упражнениями, которые я должен выполнить до понедельника. У меня есть три дня, чтобы выучить язык и выполнить упражнения.Я изучал весь день, около 14 часов (по-настоящему).Я привыкаю к ​​postgresql, но я борюсь с одной вещью.Так как я очень новичок в программировании и у меня нет достаточно времени, чтобы выполнить этот специфический поиск, у меня нет других вариантов, но я прошу вас, ребята.
Вот проблема.У меня есть одинаковые столбцы "id_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;

, из-за которого Мария пропадает без вести (поскольку ее идентификатор не отображается в первой таблице. Предполагается, что он показывает ноль

Также:

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'

Большое спасибо!

First Table Second Table Final Result

1 Ответ

0 голосов
/ 06 октября 2018

Две вещи:

  1. Каждый раз, когда у вас есть две таблицы в строке FROM, вы выполняете ВНУТРЕННЕЕ СОЕДИНЕНИЕ, которое требует сопоставления строк в обеих таблицах.
  2. В любое времяу вас есть критерии в предложении WHERE, только те строки, которые будут возвращены, будут возвращены, что снова ограничит вас записями в обеих таблицах с предложением, которое у вас есть.

Вам нужно LEFT JOIN, который позволяет вам переходить от существующих записей к записям, которые могут существовать или не существовать.

Попробуйте.Он начнется с вашей таблицы en_cliente и присоединится к вашим записям в таблице en_aluguel, даже если в en_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», вы получите точно такой же код (просто другой синтаксис), что и в первом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...