如何从 SELECT 查询结果中删除条目 mysql?
How to delete entries from a SELECT query result in mysql?
我有以下 SQL 查询:
SELECT wp_posts.* , wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'es-es'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID
这 returns 我需要从我的数据库中删除的所有结果,所以我尝试了几个 DELETE 查询,但所有查询都出现语法错误。
示例:
DELETE FROM wp_posts
WHERE (
SELECT wp_posts.* , wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'pt-pt'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID
)
);
也试过这个:
DELETE FROM wp_posts WHERE wp_posts.ID = ANY IN (
SELECT wp_posts.ID, wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'es-es'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID
)
这是一个复杂的聚合查询,我缺乏 mysql 知识来正确编写删除这些结果的规则。
我该如何解决这个问题?
谢谢
你走在正确的轨道上!
您只是错过了正确的 WHERE 条件:
DELETE FROM wp_posts WHERE wp_posts.ids IN (...)
确保结果只有一列,您在从目标表中删除数据时应参考该列。删除查询将等于您需要从 ie.
中删除的表的数量
DELETE FROM table_1 where common_column in (YOUR_SELECT_QUERY);
DELETE FROM table_2 where common_column in (YOUR_SELECT_QUERY);
DELETE FROM table_3 where common_column in (YOUR_SELECT_QUERY);
DELETE FROM table_nth where common_column in (YOUR_SELECT_QUERY);
您的 select 查询类似于,
SELECT GROUP_CONCAT(temp_tbl.ID) FROM (SELECT wp_posts.* , wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'es-es'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID) AS temp_tbl
如果我们有一个复杂的查询,return是我们要删除的 wp_posts
行的 id
值(假设 id
是主键或 table) 中一行的唯一键...作为示例
SELECT p.id
FROM wp_posts p
JOIN wp_icl_translations t
ON t.element_id = p.id
WHERE t.language_code = 'es-es'
AND t.element_type = 'post_product'
AND p.post_type = 'product'
GROUP
BY p.id
然后我们可以将该查询用作内联视图。我们将查询包裹在括号中,并在另一个查询的 FROM 子句中引用它。 MySQL 要求我们为内联视图分配一个别名(或 derived table in the MySQL 白话)。
我们可以将内联视图的结果连接回我们要从中删除行的 table。我们先写这个SELECT语句
SELECT r.*
FROM ( -- inline view
SELECT p.id
FROM wp_posts p
JOIN wp_icl_translations t
ON t.element_id = p.id
WHERE t.language_code = 'es-es'
AND t.element_type = 'post_product'
AND p.post_type = 'product'
GROUP
BY p.id
) q
JOIN wp_posts r
ON r.id = q.id
到 return 要删除的行集。我们可以验证这是预期的集合,或者将行集合插入(创建 table 为)到备份中...
一旦我们确信 SELECT 正在 returning 我们要删除的行,我们可以通过将 SELECT 关键字替换为 DELETE 将其转换为 DELETE 语句。
DELETE r.*
FROM ( -- inline view
SELECT p.id
FROM wp_posts p
JOIN wp_icl_translations t
ON t.element_id = p.id
WHERE t.language_code = 'es-es'
AND t.element_type = 'post_product'
AND p.post_type = 'product'
GROUP
BY p.id
) q
JOIN wp_posts r
ON r.id = q.id
我有以下 SQL 查询:
SELECT wp_posts.* , wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'es-es'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID
这 returns 我需要从我的数据库中删除的所有结果,所以我尝试了几个 DELETE 查询,但所有查询都出现语法错误。
示例:
DELETE FROM wp_posts
WHERE (
SELECT wp_posts.* , wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'pt-pt'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID
)
);
也试过这个:
DELETE FROM wp_posts WHERE wp_posts.ID = ANY IN (
SELECT wp_posts.ID, wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'es-es'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID
)
这是一个复杂的聚合查询,我缺乏 mysql 知识来正确编写删除这些结果的规则。
我该如何解决这个问题?
谢谢
你走在正确的轨道上!
您只是错过了正确的 WHERE 条件:
DELETE FROM wp_posts WHERE wp_posts.ids IN (...)
确保结果只有一列,您在从目标表中删除数据时应参考该列。删除查询将等于您需要从 ie.
中删除的表的数量DELETE FROM table_1 where common_column in (YOUR_SELECT_QUERY);
DELETE FROM table_2 where common_column in (YOUR_SELECT_QUERY);
DELETE FROM table_3 where common_column in (YOUR_SELECT_QUERY);
DELETE FROM table_nth where common_column in (YOUR_SELECT_QUERY);
您的 select 查询类似于,
SELECT GROUP_CONCAT(temp_tbl.ID) FROM (SELECT wp_posts.* , wicl_translations.*
FROM wp_posts wp_posts join wp_icl_translations wicl_translations
ON (wicl_translations.element_id = wp_posts.ID)
WHERE (wicl_translations.language_code = 'es-es'
AND wicl_translations.element_type ='post_product'
AND wp_posts.post_type = 'product' ) GROUP BY wp_posts.ID) AS temp_tbl
如果我们有一个复杂的查询,return是我们要删除的 wp_posts
行的 id
值(假设 id
是主键或 table) 中一行的唯一键...作为示例
SELECT p.id
FROM wp_posts p
JOIN wp_icl_translations t
ON t.element_id = p.id
WHERE t.language_code = 'es-es'
AND t.element_type = 'post_product'
AND p.post_type = 'product'
GROUP
BY p.id
然后我们可以将该查询用作内联视图。我们将查询包裹在括号中,并在另一个查询的 FROM 子句中引用它。 MySQL 要求我们为内联视图分配一个别名(或 derived table in the MySQL 白话)。
我们可以将内联视图的结果连接回我们要从中删除行的 table。我们先写这个SELECT语句
SELECT r.*
FROM ( -- inline view
SELECT p.id
FROM wp_posts p
JOIN wp_icl_translations t
ON t.element_id = p.id
WHERE t.language_code = 'es-es'
AND t.element_type = 'post_product'
AND p.post_type = 'product'
GROUP
BY p.id
) q
JOIN wp_posts r
ON r.id = q.id
到 return 要删除的行集。我们可以验证这是预期的集合,或者将行集合插入(创建 table 为)到备份中...
一旦我们确信 SELECT 正在 returning 我们要删除的行,我们可以通过将 SELECT 关键字替换为 DELETE 将其转换为 DELETE 语句。
DELETE r.*
FROM ( -- inline view
SELECT p.id
FROM wp_posts p
JOIN wp_icl_translations t
ON t.element_id = p.id
WHERE t.language_code = 'es-es'
AND t.element_type = 'post_product'
AND p.post_type = 'product'
GROUP
BY p.id
) q
JOIN wp_posts r
ON r.id = q.id