我想删除 PAGES 表格中的条目。删除后,它将级联到 OBJECTS 表。不用担心,如果我使用简单的DELETE
删除条目,它就可以了。但是,我需要指定一些条件:
PAGES 表
+--------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+--------------+------+-----+---------+----------------+
| page_id | int(11) | NO | PRI | NULL | auto_increment |
| users_id | int(11) | NO | MUL | NULL | |
| page_value | varchar(20) | NO | UNI | NULL | |
+--------------------------+--------------+------+-----+---------+----------------+
对象表
+----------------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+-------------+------+-----+---------+----------------+
| objects_id | int(11) | NO | PRI | NULL | auto_increment |
| page_id | int(11) | NO | MUL | NULL | |
| objects_name | varchar(50) | NO | | NULL | |
| objects_avail | varchar(20) | NO | | NULL | |
+----------------------------+-------------+------+-----+---------+----------------+
如果objects_avail == "ALL"
,我不得在级联删除中包含该条目。我提出了这个SQL查询但是出现了错误:
$query = "
DELETE FROM pages AS p
INNER JOIN objects AS o ON p.page_id = o.page_id
WHERE p.page_id = ?
AND p.users_id = ?
AND p.page_value = ?
AND o.objects_avail != ?";
抛出的错误:
[“42000”,1064,“您的SQL语法有错误;请查看手册 对应于您的MySQL服务器版本,以获得正确的语法 在'AS p INNER JOIN对象附近使用,请在p.page_id = o.page_id WHER' 在第1行“]
PDO占位符的示例值:
$params = array(81,5,"main page","ALL");
所有这些都是有效的,我确信这不是问题所在。
我怀疑或预先确定我在查询中遗漏了一些内容,有什么建议吗?
答案 0 :(得分:2)
对于内部联接UPDATE或DELETE,您需要明确指定实际要删除哪些表,否则解析器将不知道您的意思。您可以选择一个或多个要删除的表。在您的情况下,删除页面的别名p是有意义的。
DELETE p
FROM pages AS p
INNER JOIN objects AS o ON p.page_id = o.page_id
WHERE
p.page_id = ? AND
p.users_id = ? AND
p.page_value = ? AND
o.objects_avail != ?
我改变的唯一一行是DELETE成为DELETE p