根据 table 中的值查询 table

Query a table based on values from within that table

我们有一个包含问答插件的 WordPress 网站,需要将其移至其他主机。问答帖子仅占帖子总数的一小部分 table,因此我想使用 SQL 查询将它们过滤掉。

我想通过 PhpMyAdmin select 数据库中符合以下条件之一的行的所有内容:

  1. post_type = "answer"
  2. post_type = "question"
  3. post_type 包含修订,前面是前面任一条件的 ID。例如:21-revision-v110903-revision-v1 我想要 select 那些第一个数字部分与前 2 个要求中 selected 的帖子 ID 相匹配的帖子。

我是 SQL 的新手,所以我开始使用谷歌搜索,发现了临时表的概念。这导致我创建了这段代码:

SELECT *  INTO #QA 
FROM `wp_posts` WHERE 
`post_type` = "answer" OR
`post_type` = "question"

但是我收到以下错误:

#1064 - Er is iets fout in de gebruikte syntax bij 'FROM wp_posts WHERE
post_type = "answer" OR
post_type = "question" LIMI' in regel 2

翻译成“附近的语法有问题”......

我的尝试可行吗?

MySQL 不支持 select ... into ... 语法写入 table,如 pinpointed in the documentation.

您可以使用 insert ... select:

insert into `#qa`
select *
from wp_posts
where post_type in ('question', 'answer')

SELECT * INTO... 语法用于创建新的 table。
如果这是您想要的,那么 MySql 的语法是:

CREATE TABLE tablename AS
SELECT * FROM `wp_posts` 
WHERE `post_type` = 'answer' OR `post_type` = 'question'

您使用的语法最常与 SQL 服务器相关联。 MySQL 使用(更常见的)create table as 语法。并且,它专门允许语法中的临时 tables。

因此,MySQL 中的等价物是 CREATE TABLE AS:

CREATE TEMPORARY TABLE QA AS
    SELECT p.*  
    FROM wp_posts p
    WHERE post_type IN ('answer', 'question');

请注意,临时 tables 是一种非常特殊的 table 类型,它仅存在于当前“会话”中——比如说,您当前与数据库的连接。它对其他用户不可见,当您重新连接到数据库时它会消失。