我有一个更复杂的查询(不起作用)
query.select_all(:table_1).select_more(:col_1)
.left_outer_join(:table_2, table_1_id: :id, col_1: 1,
Seqel.lit('col_2 > ?', 1.week.ago)
我需要像这样比较col_2
:
"col_2 > '2018-01-01 10:10:10'"
将整个查询编写为自定义sql很容易,但我想链接方法,到目前为止我无法成功添加上述内容。
预期结果〜:
"SELECT `table_1`.*, `table_2`.`col_1` FROM `table_1`
LEFT OUTER JOIN `table_2`
ON (
`table_2`.`table_1_id` = `table_1`.`id`
AND
`table_2`.`col_1` = 1
AND
`table_2`.`col_2` > '2018-01-01 10:10:10')"
我使用with_sql
但忽略了其他范围。
我也试过了:
.left_outer_join("`table_2` ON (`table_2`.`table_1_id` =
`table_1`.`id` AND `table_2`.`col_1` = 1 AND `table_2`.`col_2` >
'2017-09-28 06:49:53 UTC')")
最后一个问题是它用额外的``
对我有用的是什么:
.left_outer_join(:table_2,
Sequel.lit('table_2.table_1_id = table_1.id AND table_2.col_1 = ?
AND table_2.col_2 > ?', id, date))
但有没有办法在不使用字符串查询的情况下完成它?
答案 0 :(得分:1)
.left_outer_join(:table_2, :table_1_id=>:id, :col_1=>id){Sequel[:table_2][:col_2] > date}
答案 1 :(得分:0)
这可能有点清洁:
.left_outer_join(:table_2,
table_2.where(table_1_id: 'table_1.id')
.where(col_1: id)
.where('col 2 > ?', date)
)
答案 2 :(得分:0)
我会发布自己的答案,但不会接受,因为我认为可以做得更好。
.left_outer_join(:table_2,
Sequel.lit('table_2.table_1_id = table_1.id AND table_2.col_1 = ?
AND table_2.col_2 > ?', id, date))
等待其他建议。