0

我们是否可以编写可以根据成功实现 3 个记录字段来更新单个记录的查询。

例如

第一个表:table1

第一个表字段

ID INT

名称 varchar

status enum('full', 'half') 默认为 Null

第二张表:table2

第二个表字段

ID INT

table1_id int - 外键

数量 1 个整数

数量 2 整数

=============

表格1

1

测试

空值

表2

编号 - > 1

table1_id -> 1

数量 1 -> 1

数量2 - > 2


编号 - > 2

table1_id -> 1

数量 1 -> 2

数量2 - > 2

================

一对多关系

表 1 --> 表 2

========================

将状态字段(table1)更新为“完整”的条件是,对于 table2 中 table1_id 的所有记录,具有 Qty1 == qty2(对于 table1_id 的所有记录)和 qty2 !=0

否则休息到“一半”

4

1 回答 1

1

如果您聚合Table2,取SUM()您希望测试每条记录的布尔表达式的 ,结果将是匹配记录的数量(因为TRUE转换为和1)。因此,只需要检查匹配记录的数量是否等于记录的总数:FALSE0

UPDATE Table1 SET status = (
  SELECT IF(SUM(Qty1=Qty2 AND Qty2!=0) = COUNT(*), 'full', 'half')
  FROM   Table2
  WHERE  table1_id = Table1.id
)

sqlfiddle上查看。

于 2012-10-11T12:16:18.317 回答