我有两张桌子:
devices
:( id(int),type(int))devices_log
:( id(int),device_id(int)(FK),data(string),date(string))类型是 1到10 之间的数字,数据列应该是 1到100 之间的数字(" 1",.. 。," 100")或" emptyX" ( X 表示来自&#34的所有字符; a&# 34;到" z" )
具有类型9的设备在数据列中始终具有数字。
我需要更新所有"类型9" 设备的数据字段 有一个大于50的数据,所以==> data = data / 2.
我开始使用INNER JOIN
:
select l.id
from devices_log l
inner join (select id from devices where type = 9) d on (l.device_id = d.id)
此语句返回"类型9"的所有日志。设备,但当我添加where条件时:
select l.id
from devices_log l
inner join (select id from devices where type = 9) d on (l.device_id = d.id)
where cast(data as INTEGER) > 50
我收到了这个错误:
错误:整数的输入语法无效:" emptyG"
我也尝试了很多导致同样错误的陈述:
select id
from devices_log
where device_id in (select id from devices where type = 9)
and cast(data as integer) > 50
select id from
(
select id, device_id, cast (devices_log.data as integer) as int_data
from devices_log
join devices on (devices_log.device_id = devices.id
) and type = 9) ccs where ccs.int_data > 50
有什么建议吗?
提前致谢
答案 0 :(得分:2)
SQL查询描述结果集,而不是正在采取的具体步骤。我实际上认为这个问题没有出现在Postgres中(我在其他数据库中看到过)。我会从这个版本开始:
select l.id
from devices_log l inner join
devices d
on l.device_id = d.id
where d.type = 9 and cast(l.data as INTEGER) > 50 ;
如果这不能解决问题,那么您可以使用case
中的where
解决此问题:
select l.id
from devices_log l inner join
devices d
on l.device_id = d.id
where d.type = 9 and
(case when d.type = 9 then cast(l.data as INTEGER) end) > 50 ;
除非条件为真,否则case
不应评估then
。