知道某行是否列最低?

时间:2017-08-06 15:57:05

标签: mysql sql

我正在编写一个根据当前值更新行的查询 我检查的条件之一是"如果更新的特定行具有一个列,该列是具有4个相同行值的其他行中表中的最低值"。

所以..例如,我的表结构是这样的:

INTEGER id - PRIMARY KEY
FLOAT lookup
VARCHAR(128) option1
INTEGER option2
INTEGER option3
INTEGER option4

我想知道I' m UPDATE - 行是否是与lookup匹配的所有其他行中option1值最低的行option2,{ {1}},option3option4值。

我怎么能在一个查询中实现这样的东西?我试图最大限度地减少查询并从单个查询中获得最大收益,因此我无法使用我的前端。我可以使用子查询,查询的字符限制是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中实现它。

1 个答案:

答案 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