sql - 每次写一个额外的列来查询不同值的结果

标签 sql oracle

我已经搜索了很长一段时间,但我一直无法找到我所寻找的答案。我有以下查询:

SELECT DISTINCT o.titulo, o.fecha_estreno
FROM Obra o 
WHERE (o.titulo LIKE '%Barcelona%' AND EXISTS(SELECT p.id_obra FROM Pelicula p WHERE p.id_obra = o.id_obra)) OR EXISTS(SELECT DISTINCT pa.id_obra 
FROM Participa pa
WHERE pa.id_obra = o.id_obra AND EXISTS(SELECT DISTINCT l.nombre FROM Lugar l
    WHERE l.nombre LIKE '%Barcelona%' AND EXISTS(SELECT DISTINCT tl.id_lugar FROM TieneLugar tl
        WHERE tl.id_lugar = l.id_lugar AND tl.id_profesional = pa.id_profesional))) OR EXISTS(SELECT DISTINCT er.id_obra 
        FROM EstaRelacionado er 
            WHERE er.id_obra = o.id_obra AND EXISTS(SELECT DISTINCT k.keyword 
            FROM Keywords k
                WHERE k.id_keyword = er.id_keyword AND k.keyword LIKE '%Barcelona%')); 

它基本上做的是在我的数据库中搜索每部电影,这些电影在某种程度上与它所获得的城市相关。我想为每个结果显示第三列,并说明该行作为结果显示的原因(例如:TITLE CONTAINS IT,或 ACTOR FROM THE MOVIE BORN THERE,等等)

感谢您的耐心等待和帮助!

编辑:按照建议,这里有一些输出示例。该列应仅显示与电影相关的第一个原因:

TITULO            FECHA_ESTRENO        CAUSE
----------       ----------------    ----------
Barcelona mia         1967             TITLE

最佳答案

https://www.postgresql.org/docs/7.4/static/functions-conditional.html

The SQL CASE expression is a generic conditional expression, similar to if/else statements in other languages:

CASE WHEN condition THEN result
     [WHEN ...]
     [ELSE result] 
END 

CASE clauses can be used wherever an expression is valid. condition is an expression that returns a boolean result. If the result is true then the value of the CASE expression is the result that follows the condition. If the result is false any subsequent WHEN clauses are searched in the same manner. If no WHEN condition is true then the value of the case expression is the result in the ELSE clause. If the ELSE clause is omitted and no condition matches, the result is null.

您的案例示例:

SELECT (CASE WHEN EXISTS(... l.nombre LIKE '%Barcelona%') THEN 'TITLE CONTAINS IT' WHEN <conditon for actor> THEN 'ACTOR WA BORN THERE' WHEN ... END) as reason

关于sql - 每次写一个额外的列来查询不同值的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50149157/

相关文章:

MySQL检查两个日期范围是否与输入重叠

sql - Go 中的 Postgres 列表参数(使用 database/sql 和 pq)

java - preparedstatement 关闭后有没有办法获取结果集? ( java )

Java:ResultSet关闭策略,除了finally关闭之外

java - Mybatis selectKey不返回序列值

asp.net - SQL select 返回值到变量

oracle - 为什么 (a | b ) 等于 a - (a & b) + b?

java - Hibernate 翻译功能

java - JDBC:调用外部 SQL 脚本,声明 PL/SQL 包

mysql - 递归选择一个类别的所有子类别