Я работаю над базой данных фильмов для класса, и мне нужно создать запрос, в котором он получит заголовок и дату выхода фильма, и покажет эти столбцы тогда и только тогда, когда заголовок фильма содержит указан город или есть актер / актриса, связанная с фильмом, который родился или умер в этом городе. Проблема возникает, когда мне нужно добавить третий столбец, в котором сообщается некоторая информация о том, как фильм имеет отношение к данному городу (название содержит его, актер связан с городом и т. Д.). Мне оказали предыдущую помощь, сказав мне использовать оператор CASE (я использую Oracle), и вот к чему я пришел:
SELECT DISTINCT o.titulo, o.fecha_estreno,
CASE
WHEN UPPER(o.titulo) LIKE '%ZARAGOZA%' AND EXISTS(SELECT p.id_obra FROM Pelicula p WHERE p.id_obra = o.id_obra) THEN 'Titulo'
WHEN EXISTS(SELECT DISTINCT pa.id_obra
FROM Participa pa
WHERE pa.id_obra = id_obra AND EXISTS(SELECT DISTINCT l.nombre FROM Lugar l
WHERE UPPER(l.nombre) LIKE '%ZARAGOZA%' AND EXISTS(SELECT DISTINCT tl.id_lugar FROM TieneLugar tl
WHERE tl.id_lugar = l.id_lugar AND tl.id_profesional = pa.id_profesional))) THEN 'Actor relacionado con lugar'
WHEN EXISTS(SELECT DISTINCT er.id_obra
FROM EstaRelacionado er
WHERE er.id_obra = id_obra AND EXISTS(SELECT DISTINCT k.keyword
FROM Keywords k
WHERE k.id_keyword = er.id_keyword AND UPPER(k.keyword) LIKE '%ZARAGOZA%')) THEN 'Keyword relacionada con pelicula'
END AS Causa
FROM Obra o;
Но это просто покажет все названия фильмов, даже если они вообще не связаны. Я обнаружил, что он просто не войдет ни в какое утверждение WHEN, а просто выберет DISTINCT для всех заголовков. Есть ли способ исправить это и показать результат как следует? Пример:
TITULO FECHA_ESTRENO CAUSE
---------- ---------------- ---------------------
Barcelona mia 1967 Title contains city
Lights out 1985 Actor is related to place
РЕДАКТИРОВАТЬ: Например. В выключенном свете есть актер, которому назначено событие (родился или умер), в котором содержится искомый город.
Этот запрос должен отображать только 300 элементов. Это показывает 4400. Я знаю, что это имеет отношение к предложению WHERE, но я попытался написать WHERE Cause NOT NULL; и это не сработает, поскольку столбец Причина на самом деле не существует