编写查询,其中属性值与属性名称相同

时间:2013-06-05 11:28:09

标签: mysql

这是我的问题以下是我的表架构

表:图像

| id | title | width | height | span   | status |
| 1  | s1    | 900   | 310    | height | 1      |
| 2  | s2    | 300   | 250    | width  | 1      |
| 3  | s3    | 450   | 400    | width  | 1      |
| 4  | s4    | 650   | 560    | width  | 1      |

在列\属span下,您可以看到我在属性width下的属性中保持宽度高度height我保留了维度。

当我运行此查询时

UPDATE `images` SET `span` =  width  WHERE `ID` = 1

OR

UPDATE `images` SET `span` = `width` WHERE `ID` = 1

它的作用是它选择记录的属性width的值,并用它替换属性'span'的值。以下是此查询所做的更改

表:图像

| id | title | width | height | span   | status |
| 1  | s1    | 900   | 310    | 900    | 1      |
| 2  | s2    | 300   | 250    | width  | 1      |
| 3  | s3    | 450   | 400    | width  | 1      |
| 4  | s4    | 650   | 560    | width  | 1      |

虽然我想做的是用文本宽度

替换记录1的span值

当我使用文本名称高度时会发生同样的问题。

该怎么做?

2 个答案:

答案 0 :(得分:1)

这是因为您在字符串上使用反引号来应用于字段,而您应该使用引号'

UPDATE `images` SET `span` = 'width' WHERE `ID` = 1
                             ^here ^ you need quotes

您可以避免使用ID列的引号,因为它应该是整数列,但是如果列不是整数,则无法避免使用它们(作为您的第一个示例) span = width

反引号通常用于列名和表名,但只要您不使用任何reserved keyword

,就可以避免使用它们

答案 1 :(得分:0)

我还没试过,但你不能这样做:UPDATE images SET span = images.width WHERE ID = 1