我有3个表(写成重要部分,不是全部数据):
tableDeviceStatus :
feature_count = IntegerField('Number of features', validators=[DataRequired(), LessThan('effective_rank'), NumberRange(min=1, max=50)])
tableDeviceTrigger :
device_id status
--------- ------
device01 15
device02 20
tableDeviceCommand :
device_id device_operator device_param triggered_device command
--------- --------------- ------------ ---------------- -------
device01 > 22 device80 1
device01 < 18 device87 0
device02 = 1 device89 1
流量:
例如:
我尝试过触发,但是无法解决搜索,比较和执行。 (因为一台设备可以进行多个比较。我几乎为一行创建了一个,但无法像每行那样进行公式化并执行)
答案 0 :(得分:1)
欢迎堆栈溢出!如果我理解正确,对于tableDeviceStatus
中输入的每个新行,您都希望使用tableDeviceTrigger中匹配的@device_id测试每一行。
对于tableDeviceTrigger中的每个匹配行,都要测试它是否符合要求(@status @device_operator @device_param is TRUE
)。对于满足这些要求的每一行,请在tableDeviceCommand中添加一行@triggered_device
和@command
。
这样的事情有用吗?
INSERT INTO tableDeviceCommand (device_id, command)
-- maybe REPLACE INTO or UPDATE depending on your requirements
(
SELECT tdt.triggered_device, tdt.command
FROM tableDeviceStatus tds
INNER JOIN tableDeviceTrigger tdt on tds.device_id = tdt.device_id
WHERE
(tdt.device_operator = ">" and tds.status > tdt.device_param) OR
(tdt.device_operator = "<" and tds.status < tdt.device_param) OR
(tdt.device_operator = "=" and tds.status = tdt.device_param)
-- add additional ORs to test the comparison specified by device_operator
)