【问题标题】:MySQL : Comparing values of two different colums from a same tableMySQL:比较同一个表中两个不同列的值
【发布时间】:2014-01-18 18:10:08
【问题描述】:

我想比较单个表中两个列的值,并在 MySql 中根据结果更新另一个列。值在同一行。

例子:

如果值 COL A > 值 Col B ==> Col C = "player1"

如果值 COL A Col C = "player2"

我怎么能这样做?

类似的东西: UPDATE table SET col C = "player1" WHERE ...

编辑:

所以我只是尝试使用 CASE...

UPDATE partie SET col C =  
CASE
  WHEN Col A > Col B THEN 'player1'
  WHEN Col A < Col B THEN 'player2'
  ELSE 'deuce' 
END
WHERE .... ;

在 Mysql 中是否正确?

非常感谢

【问题讨论】:

  • 大概玩家 1 和 2 在不同的行上?
  • COL A、B、C 的值在同一行

标签: mysql


【解决方案1】:

在两个不同的查询中这样做:

UPDATE table SET C = 'player1' WHERE a > b;
UPDATE table SET C = 'player2' WHERE a < b;

或者试试这个班轮:

UPDATE table SET C = IF(a > b, 'player1', 'player2')

请注意:

  • 当 a = b 时,您希望发生什么?
  • 如果不进一步过滤,以上所有内容都将进行全表扫描,因此对于大型表来说非常重要。

【讨论】:

  • 干得好,我忘记了 a = b 的情况,但我想我会找到的!如果我想在 WHERE 添加条件,我需要放置 AND ?对吗?
  • 正确,输入“AND some_condition_that_holds_true”。您当然可以嵌套 IF 语句,或者改用 CASE 语句。
  • Shlomi,ty,我尝试使用 CASE。它似乎更整洁......你能告诉我它是否正确吗? ty
  • @user2971617 。 . . case 是标准 SQL,所以我更喜欢它。但是,在功能方面,caseif 在这种情况下是相同的。所以,case 很好。
  • @user2971617 两种方式都很好
【解决方案2】:

类似的东西

<?php
if ($Cola > $Colb){
UPDATE $tableName SET ColC = "player1";
}
else{
UPDATE $tableName SET ColC = "Player 2";
}
?>

【讨论】:

  • er php 是从哪里来的?
  • 这将根据对一行的测试设置表中的每一行。
  • 我不是给你 -1 的,但我能理解他们为什么这么做。
  • 我只是用 php 做的,同样可以用任何语言做。除了mysql,他没有说他使用的是什么语言。这是如何设置它的一个示例……显然他知道 WHERE,因为他没有提到任何这些,所以我应该怎么知道 WHERE?在我看来,这是一张一排的桌子......正如他之前提到的,它是一排有可乐 colb colc 等......
  • 执行查询的语言是 sql,除非您沿着 ORM 路线走,并且 OP 根据每一行对每一行进行更新。即使您使用 ORM 在任何语言中执行此类查询客户端也不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多