Нахождение ошибки по запросу SQL при изучении Intern join multitable - PullRequest
2 голосов
/ 11 марта 2020

Я учусь SQL, и когда я выполнял некоторые упражнения, этот вопрос показался мне. Что касается многостоловых консультаций, я иногда вижу, что я могу использовать предложение Where вместо внутреннего соединения, но я пытаюсь использовать соединение, потому что это topi c, которую я сейчас пытаюсь изучить. В этом примере я написал это:

select p.nombre from pokemon p join pokemon_forma_evolucion pfe 
on p.numero_pokedex = pfe.numero_pokedex
join forma_evolucion fo 
on pfe.id_forma_evolucion = fo.id_forma_evolucion
join tipo_evolucion t
on t.tipo_evolucion = fo.tipo_evolucion
where lower(t.tipo_evolucion) = 'intercambio';

, но это ничего не показывает. (0 результатов)

в Упражнениях правильный ответ от блоггера следующий: он отлично работает и показывает 4 результата:

select p.nombre
from pokemon p, pokemon_forma_evolucion pfe, 
forma_evolucion fe, tipo_evolucion te
where p.numero_pokedex = pfe.numero_pokedex 
and pfe.id_forma_evolucion = fe.id_forma_evolucion
and fe.tipo_evolucion = te.id_tipo_evolucion
and lower(te.tipo_evolucion) = 'intercambio';

Я хотел бы знать, почему у меня не работает и как я должен использовать команду JOIN правильно. Ссылка на блог с упражнениями с DER и доступ ко всей базе данных "pokemon" SQL: https://www.discoduroderoer.es/ejercicios-propuestos-y-resueltos-consultas-sql-bd-pokemon/

Спасибо за помощь. Я новичок в публикации в этом сообществе, но я не первый раз пользуюсь им и получаю от этого удовольствие. Спасибо за все

1 Ответ

0 голосов
/ 11 марта 2020

где и присоединиться должно слово хорошо. проблема в том, что вы присоединяетесь к таблице "tipo_evolucion" в неправильном поле

в поле Типа_Эволюции в таблице FORMA-EVOLUCION указано число c (это ключевой ключ). Fild Tipo_Evolucion в таблице TIPO_EVOLUCION - это varchar2 (это не первичный ключ)

первичный ключ в TIPO_EVOLUCION IS id_tipo_evolucion

Таким образом, ваше внутреннее объединение должно быть

JOIN tipo_evolucion t ON t.id_tipo_evolucion  = fo.tipo_evolucion

поэтому запрос:

SELECT p.nombre
FROM pokemon p
     JOIN pokemon_forma_evolucion pfe ON p.numero_pokedex = pfe.numero_pokedex
     JOIN forma_evolucion fo ON pfe.id_forma_evolucion = fo.id_forma_evolucion
     JOIN tipo_evolucion t ON t.id_tipo_evolucion  = fo.tipo_evolucion
WHERE LOWER(t.tipo_evolucion) = 'intercambio';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...