如何选择或区分同一个表中的两行,在一个字段上具有相同的值但在另一个字段上具有不同的值

时间:2013-04-17 01:11:33

标签: mysql sql

我知道这个问题太长了,但我说的不够简单。所以这是我的情况:

我想在mysql中的同一个表中选择两行或更多行,其中一个字段具有相同的值,但在另一个字段中会有所不同。

示例:

mainthread |  category

1234             1
1234             1
1234             3
1234             3
5643             4
4322             6
3123             9

现在我希望当它们具有相同的主线程值时,所有类别1将更新为3。我想要更改的类别总是从1到3.这是主要的线程会有所不同,因为有数千个不同的主线程

2 个答案:

答案 0 :(得分:0)

也许我误解了这个问题,但事实并非如此:

Update mytable
Set category = 3
Where mainthread = 1234

答案 1 :(得分:0)

如果要更新表格,要将category的值设置为mainthread的所有行的值相同,则

UPDATE mytable t
  JOIN ( SELECT mainthread
              , MAX(category) AS max_category
           FROM mytable
          GROUP BY mainthread
       ) s
    ON s.mainthread = t.mainthread
  SET t.category = s.max_category

如果您只想返回具有相同主线程值且具有两个或更多不同类别值的行,则:

SELECT t.*
  FROM mainthread t
  JOIN ( SELECT mainthread
           FROM mytable
          GROUP BY mainthread
         HAVING COUNT(DISTINCT category) > 1
       ) s
    ON s.mainthread = t.mainthread
 ORDER
    BY t.mainthread
     , t.category

(你的问题并不完全清楚你要完成什么。)