Mysql 知道行是否具有最低的列?
我正在编写一个根据行的当前值更新行的查询。Mysql 知道行是否具有最低的列?,mysql,sql,Mysql,Sql,我正在编写一个根据行的当前值更新行的查询。 我要检查的条件之一是“如果我要更新的特定行有一列是表中具有4个相同行值的其他行中的最低值” 所以。。例如,我的表结构如下所示: INTEGER id - PRIMARY KEY FLOAT lookup VARCHAR(128) option1 INTEGER option2 INTEGER option3 INTEGER option4 我想知道我正在更新的行是否是与相同的选项1、选项2、选项3和选项4值匹配的所有其他行中查找值最低的行 如何在一个
我要检查的条件之一是“如果我要更新的特定行有一列是表中具有4个相同行值的其他行中的最低值” 所以。。例如,我的表结构如下所示:
INTEGER id - PRIMARY KEY
FLOAT lookup
VARCHAR(128) option1
INTEGER option2
INTEGER option3
INTEGER option4
我想知道我正在更新的行是否是与相同的选项1
、选项2
、选项3
和选项4
值匹配的所有其他行中查找值最低的行
如何在一个查询中实现这样的事情?我试图最小化查询并从单个查询中获得最大的收益,所以我不能使用我的前端。我可以使用子查询,查询的字符限制为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";
最低的
部分应该出现在id
1、2和3的行中。表中的IF\u lower\u和三元运算符是“占位符”,因为我不知道该如何在SQL中实现它。您可以使用连接和分组方式:
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';
编辑:
如果要设置最低值
和非最低值
,请使用左连接
:
UPDATE table t LEFT 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 = (CASE WHEN tt.minid IS NOT NULL THEN LOWEST ELSE NOT_LOWEST END)
WHERE option1 = 'a';
示例数据和所需的结果集将有很大帮助tried@lad2025@Harish Barma-我添加了示例数据和示例查询。我不知道我是否需要一个像SELECT
这样的结果集,所以我不知道我应该做什么。请同时显示我所做的预期结果<代码>如果\u表中的\u最低(查找)?最低:非最低
是预期结果。如果lookup
是表中最低的,则将该值设置为lower
,如果不是,则设置为not_lower
。但如何执行“三元运算符”(else
)的另一侧?在我的例子中,NOT_lower
。