我们可以根据3记录字段的成功实现编写可以更新单个记录的查询。
E.g
第一张表:table1
第一个表格字段
id INT
名称varchar
status enum('full','half')默认为Null
第二张表:table2
第二个表格字段
id INT
table1_id int - 外键
qty1 int
qty2 int
============
1
测试
NULL
id - > 1
table1_id - > 1
qty1 - > 1
qty2 - > 2
id - > 2
table1_id - > 1
qty1 - > 2
qty2 - > 2
===============
One to Manny Relationship
表1 - >表2
=======================
更新状态字段(table1)为'Full'的条件是, 对于table2中table1_id的所有记录,有Qty1 == qty2(对于table1_id的所有记录)和qty2!= 0
否则休息为'半'
答案 0 :(得分:1)
如果你聚合Table2
,取你希望测试每条记录的布尔表达式的SUM()
,结果将是匹配记录的数量(因为转换了TRUE
到1
和FALSE
到0
)。因此,只需要检查匹配记录的数量是否等于记录总数:
UPDATE Table1 SET status = (
SELECT IF(SUM(Qty1=Qty2 AND Qty2!=0) = COUNT(*), 'full', 'half')
FROM Table2
WHERE table1_id = Table1.id
)
在sqlfiddle上查看。