postgresql - postgresql case语句获取另一列值
问题描述
我有三个表:入侵、警报和闭路电视,我想使用案例语句来获取对象的注册编号及其位置,具体取决于它是闭路电视还是触发入侵表中入侵事件的警报。
这是入侵表:
CCTV 表类似于警报表,这是我的代码:
SELECT
ALARM_ID
, CCTV_ID
, CASE
WHEN
ALARM_ID IS NULL
AND CCTV_ID IS NOT NULL
THEN
(
SELECT
REGISTRATION_NUMBER, LOCATION
FROM
REMOTE_SECURITY.ALARMS
WHERE
REMOTE_SECURITY.INTRUSIONS.ALARM_ID = REMOTE_SECURITY.ALARMS.ALARM_ID
)
WHEN
ALARM_ID IS NOT NULL
AND CCTV_ID IS NULL
THEN
(
SELECT
REGISTRATION_NUMBER, LOCATION
FROM
REMOTE_SECURITY.CCTVS
WHERE
REMOTE_SECURITY.INTRUSIONS.cctv_id = REMOTE_SECURITY.CCTVS.CCTV_ID
)
ELSE
'not running'
END
FROM
REMOTE_SECURITY.INTRUSIONS
我希望最终输出是一个包含 2 列的表:位置和注册编号。(我不需要知道它是闭路电视还是警报器)
任何帮助将不胜感激!
解决方案
那么为什么不这样做:
SELECT location, registration_number FROM alarms
WHERE alarm_id IN (SELECT alarm_id FROM intrusions)
UNION
SELECT location, registration_number FROM cctvs
WHERE cctv_id IN (SELECT cctv_id FROM intrusions)
这应该基本上等同于您的代码,只是更简洁,更接近您声明的意图
如果您确实打算从intrusions
表中获取信息,那么可能类似于:
SELECT intrusion_id, datetime_occurred,
COALESCE(a.location, c.location) AS location,
COALESCE(a.registration_number, c.registration_number) AS registration_number
FROM intrusions i
LEFT JOIN alarms a ON i.alarm_id = a.alarm_id
LEFT JOIN cctvs c ON i.cctv_id = c.cctv_id
不知道你在做什么来得到一个语法错误,它在我做之后对我有用:
create temp table intrusions (intrusion_id serial primary key, datetime_occurred timestamp, alarm_id int, cctv_id int);
create temp table alarms (alarm_id serial primary key, location text, registration_number text);
create temp table cctvs (cctv_id serial primary key, location text, registration_number text);
如果您在问题中包含此类代码,它会有所帮助!如果你让其他人更容易,你会得到更多的答案……</p>
推荐阅读
- c# - 如何根据方向更改 Grid.RowDefinitions
- project-management - 如何为关键跟踪器创建客户状态?
- angular - 在 Angular 中发布 http://localhost:3000/auth 400(错误请求)
- python - 正则表达式在第二次出现字符后匹配相邻数字
- android - 如何在 Android 中生成临时 TLS 密钥和证书(没有 KeyStore)
- haxeflixel - 将 BSPMapGen 演示转换为 flxTilemap 对象
- spring - 在 Spring Cloud Stream 中使用 Spring Integration 风格有什么好处
- c++ - 使用带有 std::cout 的单引号来打印字符串实际上会打印数字
- spring - Spring MVC 注册 ContainerResponseFilter
- javascript - 如何对属性值进行求和和除法