将查询结果插入同一个表中

时间:2016-09-19 19:25:42

标签: php mysql sql-server wordpress insert

(对于WordPress人员:我正在通过组合现有的"自定义字段"来创建一组新的"自定义字段" s称为sidebar_buy_now。)

我有一个表格wp_postmeta,包含4个字段:meta_idpost_idmeta_keymeta_value

meta_id是主键,应该自动增加。

我有一个有效的SELECT查询,可以为最后3个字段生成所需的结果:post_idmeta_keymeta_value

SELECT L.`post_id`, "sidebar_buy_now" AS "meta_key",
CONCAT(L.`meta_value`, ' | ',R.`meta_value`) 
AS "meta_value" FROM `wp_postmeta` L INNER JOIN `wp_postmeta` R
ON L.`post_id` = R.`post_id`
AND L.`meta_key` = 'sidebar_buy_now_url' 
WHERE R.`meta_key` = 'sidebar_buy_now_title'

我希望在自动递增wp_postmeta时将此查询的结果插入meta_id表。

这是我正在尝试的INSERT查询,它不起作用:

INSERT into `wp_postmeta` (`post_id`,`meta_key`,`meta_value`) 
SELECT L.`post_id`, "sidebar_buy_now" AS "meta_key", 
CONCAT(L.`meta_value`, ' | ',R.`meta_value`) AS "meta_value" FROM `wp_postmeta` L INNER JOIN `wp_postmeta` R ON L.`post_id` = R.`post_id`
AND L.`meta_key` = 'sidebar_buy_now_url' WHERE R.`meta_key` = sidebar_buy_now_title'

出现此错误:

#1136 - Column count doesn't match value count at row 1

也许是因为我不知道如何在SELECT中指定一个自动递增的元ID ...(?) 任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

INSERT into wp_postmeta (post_id,meta_key,meta_value)
SELECT
   L.post_id
   ,"sidebar_buy_now" AS "meta_key"
   ,CONCAT(L.meta_value, ' | ',R.meta_value) AS "meta_value"
FROM
   wp_postmeta L
   INNER JOIN wp_postmeta R
   ON L.post_id = R.post_id AND L.meta_key = 'sidebar_buy_now_url'
WHERE R.meta_key = 'sidebar_buy_now_title'

因为meta_id是一个自动增量列,所以您实际上不会向您插入任何内容。您只需从insert语句中省略它。