我希望在两个数据库表(mysql)中使用sql JOIN删除ROW但是得到错误:
这是我的sql代码:
table_1.id =>有一行标识
3
table_2.rela =>有三行真实3
(有时候行数table_2.rela与table_1.id连接是1或5或2或......)
//$id = $this->input->post('id');
$id = '3';
$this->db->query("
DELETE *
FROM table_1
JOIN table_2
ON table_1.id = table_2.rela
WHERE table_1.id = '.$id.'");
通过上述查询,我收到此错误:
发生数据库错误
错误编号:1064
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在表格1附近' * FROM table_1 JOIN table_2。'在第1行
DELETE * FROM table_1 JOIN table_2 ON table_1.id = table_2.rela WHERE table_1.id =' .3。'
如何解决?
答案 0 :(得分:1)
DELETE
后无法使用通配符。您必须指定要从中删除记录的表。您的查询应该是:
$this->db->query("
DELETE table_1, table_2
FROM table_1
JOIN table_2
ON table_1.id = table_2.rela
WHERE table_1.id = ".floor($id));
假设id是int。如果$ id可能来自用户输入,这也会删除无效字符。
答案 1 :(得分:0)
您应该在FROM
子句之前提及至少一个表名,您要从中删除匹配的行。如果要从两个表中删除匹配的行,请提及以逗号分隔的两个表。
$this->db->query("
DELETE table_1
FROM table_1
JOIN table_2
ON table_1.id = table_2.rela
WHERE table_1.id = '".$id."'");
答案 2 :(得分:0)
$id = '3';
$this->db->query("
DELETE table_1, table_2
FROM table_1
JOIN table_2
ON table_1.id = table_2.rela
WHERE table_1.id = $id");
同样在你的原始问题中,你使用字符串错误,你的$ id被双引号括起来,你使用单一来尝试连接...因为它用双引号和你的$ id很可能是你不在的数字需要将它包装在sql的单引号中...您需要的只是"table_1.id = $id";