0

例如,我有一张桌子:

用户 ID(int) | 卡 ID(int) | 甲板(int)

   1841     |            14       |         1
   1841     |            14       |         1

它被定义为甲板列中的 int 值总是取 1 或 2 作为值(1 表示它在甲板中)。并且卡ID对于用户来说不是唯一的(这表明用户有2张卡14),如上例所示。如果我想移除一副牌中的一张 14 卡,而另一张则保留下来怎么办。什么是正确的 sql 命令,我尝试了 UPDATE 但它

4

2 回答 2

1

you can define limit at the end of update query

update [table name] set Deck=2 where User_ID=1841 and Card_id=14 limit 1;
于 2013-08-03T02:50:19.247 回答
0

基本上,您缺少一种引用任何单个特定行的方法。根据应用程序对此类参考的需求程度,允许这种情况几乎总是坏主意。有很多解决方案,例如

1) 每行通常包含唯一的 OID 或 ROWID 字段,它不会与“SELECT * FROM TABLE”一起显示,但可以在隐式请求时使用。取决于您使用的数据库引擎,例如使用 PostgreSQL 尝试

SELECT OID, * FROM TABLE WHERE OID = 'somevalue'

如果您不想在表上强制执行 UNIQUE,则通常使用此选项,而是在稍后处理可能的错误输入(如果不幸出现)。

2)您可以添加 ID 列,例如 autoincremental(请参阅 DB 手册),然后将其更新为包含唯一 ID

ALTER TABLE table_name ADD column_name column-definition;

3)您可以使用自增“运行总计”,例如。使用 MySQL,它看起来或多或少像这样:

SET @runtot:=0;
SELECT *, (@runtot := @runtot + 1) AS rt FROM table WHERE rt='somevalue'

(这每次都会进行计算,所以可能效率低下)

4)您可以使用 LIMIT 如上一个答案中所述

5)您可以加入另一个具有唯一 ID 的表并可能更新结果关系,或组合一些查询来创建和使用静态视图

6)您可以将 SELECT 与一些动态分配的值一起使用,例如 RAND() 或 NOW() 或类似的。它可能不会在整个表中创建唯一标识符,具体取决于您将使用什么函数以及如何使用它

7)将以上两种或多种解决方案结合起来

..可能还有许多其他解决方案。无论如何,通常会有一些“Id”列与一些 UNIQUE 约束一起使用。

于 2013-08-03T06:32:37.607 回答