如何根据表中的其他行更新表?

时间:2013-05-24 04:47:37

标签: mysql

每个项目的itemimages表格中有几行。应该有一个默认图像,因此有一个列isdefault设置为1。我运行了这个查询:

select * from itemimages group by itemid having sum(isdefault) = 0;
令我惊讶的是,我收到了许多没有默认图像的项目 有没有办法更新这些项目,以便其中一行(我真的不关心哪些)得到isdefault set to 1,而不是任何其他行(只有一行有isdefault = 1,其余的有isdefault = 0 1}})?

表格如下:

+--------+---------+-----------+
| itemid | imageid | isdefault |
+--------+---------+-----------+
|    115 |     167 |         0 |
|    118 |     176 |         0 |
|    128 |    9619 |         0 |
|    132 |     203 |         0 |
|    135 |    8040 |         0 |
|    141 |     223 |         0 |
|    146 |     232 |         0 |
|    148 |     239 |         0 |
|    153 |     256 |         0 |
|    164 |     285 |         0 |
+--------+---------+-----------+

1 个答案:

答案 0 :(得分:1)

很难说不能看到你的桌面架构,但我想你正在寻找这样的东西

UPDATE itemimages i JOIN
(
    SELECT MIN(imageid) imageid
      FROM itemimages
     GROUP BY itemid
    HAVING SUM(isdefault) = 0
) q ON i.imageid = q.imageid
   SET isdefault = 1

这是 SQLFiddle 演示