我正在编写一个根据当前值更新行的查询 我检查的条件之一是"如果更新的特定行具有一个列,该列是具有4个相同行值的其他行中表中的最低值"。
所以..例如,我的表结构是这样的:
INTEGER id - PRIMARY KEY
FLOAT lookup
VARCHAR(128) option1
INTEGER option2
INTEGER option3
INTEGER option4
我想知道I' m UPDATE
- 行是否是与lookup
匹配的所有其他行中option1
值最低的行option2
,{ {1}},option3
和option4
值。
我怎么能在一个查询中实现这样的东西?我试图最大限度地减少查询并从单个查询中获得最大收益,因此我无法使用我的前端。我可以使用子查询,查询的字符限制是8192个字符。
编辑:
示例行:
id | lookup | option1 | option2 | option3 | option4
1 | 1.000 | "a" | 2 | 1 | 4
2 | 1.100 | "a" | 1 | 1 | 2
3 | 1.200 | "a" | 1 | 1 | 1
4 | 1.250 | "a" | 1 | 1 | 1
5 | 1.300 | "a" | 1 | 1 | 1
我想要完成的查询:
UPDATE table SET option2 = IF_LOWEST_IN_TABLE(lookup)? LOWEST:NOT_LOWEST WHERE option1 = "a";
LOWEST
部分应该发生在id
1,2和3行。IF_LOWEST_IN_TABLE
和三元运算符是"占位符"因为我不知道如何在SQL中实现它。
答案 0 :(得分:1)
您可以使用def index
@articles = Article.order(created_at: desc).paginate(:page => params[:page], :per_page => 10)
end
和join
:
group by
编辑:
如果您想设置UPDATE table t JOIN
(SELECT min(id) as minid, option1, option2, option3, option4
FROM t
GROUP BY option1, option2, option3, option4
) tt
ON t.id = tt.minid
SET t.option2 = LOWEST
WHERE option1 = 'a';
和 LOWEST
,请使用NOT LOWEST
:
LEFT JOIN