Как заставить этот запрос работать, когда ничего не печатается? - PullRequest
0 голосов
/ 22 января 2020

У меня есть 3 файла базы данных, данное изображение содержит его схему. Я хочу получить все имена актеров, которые работали над mov ie "Sholay"

Database Schema

Я попробовал ниже query

SELECT NAME
FROM Person
WHERE Person.PID IN (SELECT PID 
                     FROM M_Cast
                     WHERE MID IN(SELECT MID FROM Movie WHERE TITLE="Sholay"))

Но на экране вывода ничего не отображается, и я не могу найти другой способ решить эту проблему.

1 Ответ

3 голосов
/ 22 января 2020

Не могли бы вы подтвердить, что в результате вы получите это

SELECT PID 
FROM M_Cast
WHERE MID IN(SELECT MID FROM Movie WHERE TITLE="Sholay")

Есть PID, который вы ищете с этим:

SELECT NAME
FROM Person
WHERE Person.PID IN

Другими словами: go к таблице Persons и посмотрите на PID столбца и проверьте, есть ли те же значения, что и в PID столбца из таблицы M_Cast, которые возвращает ваш внутренний запрос.

Вы говорите, что ваши 2 внутренних запроса работают нормально и возвращают некоторые значения. Отлично. Но допустим, что эти числа равны 555, 556, 557, а значения в столбце PID в таблице Person равны 001, 002, 003, 004, 005, 006.

Также, если PID в персонах таблицы равен ' 01 '(введите varchar) и в таблице M_Cast равен' 1 '(введите varchar), тогда ваш запрос не вернет никаких результатов, как вы можете видеть в этой небольшой демонстрационной версии: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=07e0c38f1dee01f460d5d00e3902bb93

В конце попробуйте это:

SELECT NAME
FROM Person
WHERE trim(Person.PID) IN (SELECT trim(PID )
                     FROM M_Cast
                     WHERE MID IN(SELECT MID FROM Movie WHERE TITLE="Sholay"))
...