Oracle 中的案例语句显示所有内容而不是查询项
Posted
技术标签:
【中文标题】Oracle 中的案例语句显示所有内容而不是查询项【英文标题】:Case statement in Oracle showing everything instead of queried items 【发布时间】:2018-05-03 22:02:55 【问题描述】:我正在为班级创建一个电影数据库,我必须创建一个查询,它将获取电影的标题和发行日期,并在电影标题包含指定城市或有与该电影相关的演员/女演员在该城市出生或死亡。当我必须添加第三列时,问题就来了,说明电影对给定城市的影响(标题包含它,演员与城市相关等)。我得到了以前的帮助,告诉我使用 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 语句,它只会 SELECT DISTINCT 所有标题。有什么方法可以解决这个问题并显示应该的结果吗?示例:
TITULO FECHA_ESTRENO CAUSE
---------- ---------------- ---------------------
Barcelona mia 1967 Title contains city
Lights out 1985 Actor is related to place
编辑:在熄灯时,有一个分配给它的事件(出生或死亡)的演员,其中包含搜索的城市。
这个查询应该只显示 300 个元素。它显示 4400。我知道它与 WHERE 子句有关,但我尝试编写 WHERE Cause IS NOT NULL;这不会起作用,因为列 Cause 并不真正存在
【问题讨论】:
您能提供一些示例数据并期待结果吗? “但这只会显示所有电影标题”,难怪你在外部查询中没有WHERE
子句。
@stickybit - 请考虑将其作为答案,以便对其进行投票。
@BobJarvis:完成。
我编辑了问题以显示另一个预期结果,以及我对 WHERE 子句的了解。我只是不知道在里面写什么
【参考方案1】:
查询显示所有电影,因为您的外部查询中没有 WHERE
子句。
WHERE
子句是查询的一部分,它告诉数据库返回的行应该具有哪些属性。 (实际上WHERE
是其中之一,其他人也可以产生这种效果,但此时此刻这无关紧要,您目前也没有使用其中之一)。如果省略WHERE
子句,则返回表的所有行。
【讨论】:
谢谢!但是我应该在 WHERE 中写什么?我只是想让他们显示 REASON 列是否为空。 @EnriqueTorres:嗯,在你的情况下,你需要处理三个条件。我假设您想要所有这些条件都成立的电影?因此,您可以做的最简单的事情是尝试在WHERE
和 OR
运算符中使用它们。以上是关于Oracle 中的案例语句显示所有内容而不是查询项的主要内容,如果未能解决你的问题,请参考以下文章