Sequel 加入和地点
Sequel JOIN and WHERE
我有以下 MySQL 声明:
SELECT
a.id,
b.category,
b.message,
b.is_valid
FROM
"NODE" a,
"SYSTEM_STATUS" b
WHERE
("LAST_HEARTBEAT" > TIMESTAMP '2017-09-18 15:10:04.471826') AND
a.id = b.node_id
我想把上面的转换成Sequel
我有这个方法,它是上述 MySQL 语句的简化版本:
0> self.class.live_nodes
SELECT "ID" FROM "NODE" WHERE ("LAST_HEARTBEAT" > TIMESTAMP '2017-09-18 15:11:12.906017')
=> [#<MyApp::Model::Node @values={:id=>348}>]
现在,使用此方法的结果,我想用一个名为 system_status
的 table 做一个 join
,其中 node.id = system_status.node_id
的结果。
接下来,我想将 live_nodes
的结果加入到 system_status
中,结果等于 system_status.node_id
,但我不知道该怎么做。
我尝试了以下方法:
0> MyApp::Model::Node.where { last_heartbeat > Time.now - HEARTBEAT_TIMEOUT.seconds }.join(:system_status, :node_id, :id)
但是收到这个错误
=> no implicit conversion of Symbol into Integer
不确定如何修复它。我也不认为我正在正确地使用别名
您与 join
非常接近,但我认为应该是
# basically table_name, left_side, right_side
join(:system_status, node_id: :id)
对于更明确的连接,以下也应该有效
# Sequel > 4.38.0
join(:system_status, node_id: Sequel[:nodes][:id])
# Sequel < 4.39.0
join(:system_status, node_id: Sequel.expr(:nodes__id))
这应该生成
INNER JOIN system_status ON system_status.node_id = nodes.id
我有以下 MySQL 声明:
SELECT
a.id,
b.category,
b.message,
b.is_valid
FROM
"NODE" a,
"SYSTEM_STATUS" b
WHERE
("LAST_HEARTBEAT" > TIMESTAMP '2017-09-18 15:10:04.471826') AND
a.id = b.node_id
我想把上面的转换成Sequel
我有这个方法,它是上述 MySQL 语句的简化版本:
0> self.class.live_nodes
SELECT "ID" FROM "NODE" WHERE ("LAST_HEARTBEAT" > TIMESTAMP '2017-09-18 15:11:12.906017')
=> [#<MyApp::Model::Node @values={:id=>348}>]
现在,使用此方法的结果,我想用一个名为 system_status
的 table 做一个 join
,其中 node.id = system_status.node_id
的结果。
接下来,我想将 live_nodes
的结果加入到 system_status
中,结果等于 system_status.node_id
,但我不知道该怎么做。
我尝试了以下方法:
0> MyApp::Model::Node.where { last_heartbeat > Time.now - HEARTBEAT_TIMEOUT.seconds }.join(:system_status, :node_id, :id)
但是收到这个错误
=> no implicit conversion of Symbol into Integer
不确定如何修复它。我也不认为我正在正确地使用别名
您与 join
非常接近,但我认为应该是
# basically table_name, left_side, right_side
join(:system_status, node_id: :id)
对于更明确的连接,以下也应该有效
# Sequel > 4.38.0
join(:system_status, node_id: Sequel[:nodes][:id])
# Sequel < 4.39.0
join(:system_status, node_id: Sequel.expr(:nodes__id))
这应该生成
INNER JOIN system_status ON system_status.node_id = nodes.id