相关疑难解决方法(0)

MySQL错误1093 - 无法在FROM子句中指定更新的目标表

story_category我的数据库中有一个表有损坏的条目.下一个查询返回损坏的条目:

SELECT * 
FROM  story_category 
WHERE category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category INNER JOIN 
       story_category ON category_id=category.id);
Run Code Online (Sandbox Code Playgroud)

我试图删除它们执行:

DELETE FROM story_category 
WHERE category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category 
      INNER JOIN story_category ON category_id=category.id);
Run Code Online (Sandbox Code Playgroud)

但我得到了下一个错误:

#1093 - 您无法在FROM子句中为更新指定目标表'story_category'

我怎么能克服这个?

mysql subquery mysql-error-1093 sql-delete

556
推荐指数
10
解决办法
42万
查看次数

FROM中的子查询必须具有别名

我有这个我在PostgreSQL中编写的查询返回错误说:

[错误]错误:第
3行:FROM(选择DISTINCT(可识别)AS made_only_recharge

这是整个查询:

SELECT COUNT (made_only_recharge) AS made_only_recharge
FROM (
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER = '0130'
    EXCEPT
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER != '0130'
)
Run Code Online (Sandbox Code Playgroud)

我在Oracle中有一个类似的查询工作正常.唯一的变化是我EXCEPT在Oracle中的位置我用MINUS关键字取代了它.我是Postgres的新手,不知道它的要求.处理这个问题的正确方法是什么?

sql oracle postgresql subquery

77
推荐指数
1
解决办法
12万
查看次数

在MySQL中使用LEFT JOIN和LIMIT进行DELETE

我正在尝试删除数据库中的孤立帖子并创建了此查询:

DELETE post.*
      FROM foro_post AS post
      LEFT JOIN foro_thread AS thread USING(threadid)
      WHERE thread.threadid IS NULL
Run Code Online (Sandbox Code Playgroud)

问题是我想限制,因为我的表有超过7,000,000条记录.

由于我无法使用LIMIT查询,我尝试了这个并且实际上有效,但我不确定它是否是一个有效的解决方案或者是否可以做得更好.

DELETE post.*
      FROM foro_post AS post
      LEFT JOIN foro_thread AS thread USING(threadid)
      WHERE thread.threadid IS NULL
      AND post.postid < 500

      // Where < 500 should be increasing as I delete records
Run Code Online (Sandbox Code Playgroud)

我怎样才能更有效地做到这一点?

mysql left-join

10
推荐指数
1
解决办法
9162
查看次数

为什么使用子查询进行 DELETE 比使用简单 ID 列表慢得多?

我想根据主键从中等大小(700K)表中删除大量行。认为,最好的方法应该使用SELECT-subquery 作为DELETE源列表。并在这里找到了具体的答案。问题是:它比使用两个单独的查询(首先选择 ID,然后从表中删除这些 ID)慢得多。为什么会这样?

我也做了简单的测试用例:

CREATE TABLE `xyz` (
  `xyzID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `col1` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`xyzID`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

用百万条记录填充它,然后:

DELETE FROM xyz
WHERE xyzID IN
        (
        SELECT xyzID
        FROM
            (
                SELECT xyzID
                FROM xyz
                LIMIT 3000,1000
            ) a
        );
Query OK, 1000 rows affected (53.52 sec)
Run Code Online (Sandbox Code Playgroud)

删除 2000 行会使时间加倍:

Query OK, 2000 rows affected (1 min 48.25 sec)
Run Code Online (Sandbox Code Playgroud)

但是在没有子查询的情况下删除(首先进行选择)几乎不需要时间(此处由随机生成的 id 列表):

DELETE FROM test.xyz WHERE …
Run Code Online (Sandbox Code Playgroud)

mysql

2
推荐指数
1
解决办法
1786
查看次数