我试图一次从几个表中删除.我做了一些研究,想出了这个
DELETE FROM `pets` p,
`pets_activities` pa
WHERE p.`order` > :order
AND p.`pet_id` = :pet_id
AND pa.`id` = p.`pet_id`
Run Code Online (Sandbox Code Playgroud)
但是,我收到了这个错误
Uncaught Database_Exception [1064]:您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在'p,
pets_activitiespa ... 附近使用正确的语法
我以前从来没有做过十字表删除,所以我现在没经验并且卡住了!
我究竟做错了什么?
我正在开发一个cron脚本(在PHP PDS中用于MySQL数据库),它将从数据库中删除超过30天的数据.香港专业教育学院尝试加入和删除cascaded在我的表和语句,但他们没有成功,所以我采用更简单的方法来使它工作,但我知道这不是最有效的处理器方法.
请注意,其中一些表(尤其是链接表)有数十万行,这就是为什么我想要比我在这里更聪明一点.
表结构很简单,有一个表键表,有一个时间戳和一个id.该id在所有表中重复为tablekey_id.
我目前的cron工作如下.
/* Cron script to delete old data from the database. */
if (@include dirname(dirname(dirname(__FILE__))) . '/dbconn/website_connections.php') {
$conn = $connectionFromOtherFile;
$keyTable = 'table_key';
$linksTable = 'links';
$domainsTable = 'link_domains';
$terms = 'searched_domains';
$query = $conn->query("SELECT `id` FROM `$keyTable` WHERE `timestamp` < (NOW() - INTERVAL 30 DAY)");
$query->setFetchMode(PDO::FETCH_ASSOC);
while($row = $query->fetch()) {
$conn->exec("DELETE FROM `$linksTable` WHERE `tablekey_id` = $row[id]");
$conn->exec("DELETE FROM `$domainsTable` WHERE `tablekey_id` = $row[id]");
$conn->exec("DELETE FROM `$terms` WHERE `tablekey_id` = $row[id]");
$conn->exec("DELETE …Run Code Online (Sandbox Code Playgroud) 我希望能够从2个表中删除所有数据,其中user的id =给定的id.我正在使用Java,Derby DB,Netbeans 7.3 Beta 2和OS X Mountain Lion.
我有两张桌子(抱歉这个巨大的图像):

这是我到目前为止的陈述:
String stmt2 = "DELETE FROM APP.PERSON JOIN APP.DATAVAULT WHERE PID = ?";
PreparedStatement ps2 = Main.getPreparedStatement(stmt2);
ps2 = conn.prepareStatement(stmt2);
ps2.setInt(1, user.getId());
ps2.executeUpdate();
System.out.println("Deleted");
Run Code Online (Sandbox Code Playgroud)
我不明白我如何从APP.DATAVAULT以及APP.PERSON中删除.正如您所看到的,APP.DATAVAULT中有一个外键,它是一个用户ID.
我尝试了很多东西,比如:
String stmt2 = "DELETE FROM APP.PERSON, APP.DATAVAULT WHERE PID = ?";
Run Code Online (Sandbox Code Playgroud)
和
String stmt2 = "DELETE FROM APP.PERSON AND APP.DATAVAULT WHERE PID = ?";
Run Code Online (Sandbox Code Playgroud)
我明白我必须使用外键从两者中删除,但我不知道如何.