如何在MYSQL中比较和更改值

时间:2013-01-28 10:25:54

标签: mysql

我的表格如下:

[Number]     [Value1]
1234567         8
1234567C        7
9876543         1
9876543C        2
5555555         3
5555555C        3

我想在第一列中搜索相同值的条目(数字末尾的“C”除外),并将第二列中的较高值设置为较低的值。 总是只有两个相同的值(一个带有“C”),而一些对在第二列中具有相同的值,而另一些则有不同的值。

查询结果应为:

Number          Value1
1234567           7
1234567C          7
9876543           1
9876543C          1
5555555           3
5555555C          3

2 个答案:

答案 0 :(得分:1)

实际上,您不需要任何检查,因为只有2个值(因此查询更简单):

UPDATE 
    table
SET
    Value1 = 
    (
        SELECT
            MAX(Value1)
        FROM
            table t
        WHERE
            table.Number = t.Number 
            OR table.Number = t.Number + 'C' 
    )
WHERE
    RIGHT(Number, 1) != 'C'

答案 1 :(得分:1)

以下不是理想的解决方案,但应该做你想做的事情:

update yourTable
set value1 = (
select min(value1) from (
select * from yourTable
) as x
where yourTable.number = x.number + 'C');

我在mysql workbench中用它测试过它:

create table yourTable(number varchar (10),value1 int);
insert into yourTable Values('1234567',8);
insert into yourTable Values('1234567C',7);
insert into yourTable Values('9876543',1);
insert into yourTable Values('9876543C',2);
insert into yourTable Values('5555555',3);
insert into yourTable Values('5555555C',3);
insert into yourTable Values('55555556',10);
insert into yourTable Values('55555556C',2);

然后select * from yourTable;将返回:

1234567     8
1234567C    7
9876543     1
9876543C    2
5555555     3
5555555C    3
55555556    10
55555556C   2

更新后select * from yourTable;将返回:

1234567     7
1234567C    7
9876543     1
9876543C    1
5555555     3
5555555C    3
55555556    2
55555556C   2

希望这就是你想要的:)