Php 根据类层次结构更新或删除sql表中的行
更新和删除数据库中属于不同类(表)的行的最佳方法是什么?考虑表<代码>人<代码>和<代码>学生<代码>,其中学生是人和学生的子类。ID是指人。IDPhp 根据类层次结构更新或删除sql表中的行,php,mysql,sql,sql-update,sql-delete,Php,Mysql,Sql,Sql Update,Sql Delete,更新和删除数据库中属于不同类(表)的行的最佳方法是什么?考虑表人和学生,其中学生是人和学生的子类。ID是指人。ID person: id | name student: id | number 删除 例如,如果必须删除所有学号小于100且姓名为空的人,可以使用如下查询 DELETE FROM person WHERE person.id IN ( SELECT person.id FROM person JOIN student ON person.id = student.id
person: id | name
student: id | number
删除
例如,如果必须删除所有学号小于100且姓名为空的人,可以使用如下查询
DELETE FROM person WHERE person.id IN (
SELECT person.id FROM person JOIN student ON person.id = student.id
WHERE person.name = "" AND student.number < 100
)
一种可能的方法是(在php和事务中)使用select查询检索所有匹配的行id,然后使用修改的where子句分别更新每个表:
where id in($list of_id)
。然而,这似乎是一个次优的解决方案。如何有效地解决此问题?@HaveNoDisplayName如何使用触发器更新这些表?数据库中是否必须有冗余数据?看起来这更像是一个设计缺陷,而不是一个实际的sqlquestion@MichaelKunst您指的是哪些冗余数据?我正在考虑任何类型的数据,其中不同的表表示类层次结构,示例仅用于说明。为了澄清这个问题,我对这个问题进行了一些更新。对于更新,您可以在一个存储过程中进行两次更新
UPDATE person JOIN student ON person.id = student.id
SET person.name = "test", student.number = 0
WHERE person.name = "" AND student.number > 10