我需要此查询从REPORT表中返回两个值,SUBJECT和ID_NUM。
正常选择主题,但只有在表IMS中将SECRET设置为N时才应选择ID_NUM。
我通常会这样做
join on REPORT.ID_NUM = IMS.IR_ID_NUM
但是在SELECT语句中我不确定在指定WHERE表之前如何在SELECT部分执行此操作。
SELECT SUBJECT,
--Check if secret before selecting values
--Secret column is in IMS table, value i want selected is in REPORT
CASE
WHEN (SECRET = 'N') THEN ID_NUM
ELSE 'SECRET' END
AS 'ID_NUM ',
FROM REPORT
INNER JOIN IMS ON ID_NUM = IR_ID_NUM
INNER JOIN IR_SUBJECT ON IR_ID_NUM = SUB_ID_NUM
答案 0 :(得分:3)
SQL语句的不同子句按逻辑顺序执行:
SELECT ... // 5.
FROM ... // 1.
JOIN ... ON ...
WHERE ... // 2.
GROUP BY ... // 3.
HAVING ... // 4.
ORDER BY ... // 6.
按顺序排列:
FROM
表,应用任何联接ON
条件,以及用逗号(,
)分隔的交叉连接表。WHERE
条款过滤记录。GROUP
HAVING
子句过滤分组值。SELECT
' d。可以使用FROM
子句中列出的所有表中的列,包括JOIN
表。ORDER
。您甚至可以按计算结果值进行排序。因此,CASE
子句中的SELECT
表达式可以毫无问题地访问SECRET
和ID_NUM
。
注意:建议在给出多个表时始终限定列名。如果列名不明确(多个表具有相同名称的列),则需要它,但是您应该对非模糊列名称执行此操作,作为其他人(以及您自己)稍后读取SQL语句的文档。