未知列在“字段列表”“ID”,但列在列表中

问题描述 投票:1回答:3

错误:

在“字段列表”未知列“ID”

我百思不得其解。正如你可以看到下面,IDwp_posts桌子底下一列:

create table wp_posts (
  ID integer primary key auto_increment,
  post_title varchar(30),
  post_type varchar(30)
);


create table wp_postmeta (
  ID integer primary key auto_increment,
  post_id integer,
  meta_key varchar(30) not null default '_regular_price',
  meta_value integer not null
);

查询产生的错误:

DELETE FROM wp_posts 
WHERE  id IN (SELECT id 
              FROM   (SELECT id, 
                             post_title, 
                             post_type, 
                             meta_value 
                      FROM   (SELECT wp_postmeta.post_id, 
                                     post_title, 
                                     post_type, 
                                     meta_value, 
                                     Row_number() 
                                       OVER( 
                                         partition BY post_title 
                                         ORDER BY wp_postmeta.meta_value) rn 
                              FROM   wp_postmeta 
                                     JOIN wp_posts 
                                       ON wp_postmeta.post_id = wp_posts.id 
                              WHERE  wp_posts.post_type = 'Product' 
                                     AND wp_postmeta.meta_key = '_regular_price' 
                             ) t 
                      WHERE  t.rn <> 1) AS aliasx); 

) t where t.rn <> 1
) AS aliasx
);

dbfiddle here

sql syntax mariadb
3个回答
3
投票

无论数据库的,你有这样的代码:

                 (SELECT id, 
                         post_title, 
                         post_type, 
                         meta_value 
                  FROM   (SELECT wp_postmeta.post_id, 
                                 post_title, 
                                 post_type, 
                                 meta_value, 
                                 Row_number() 
                                   OVER( 
                                     partition BY post_title 
                                     ORDER BY wp_postmeta.meta_value) rn 

有子查询没有id。据推测,你打算post_id而非id


1
投票

您可以简化您的查询像使用EXISTS以下

DELETE wp 
FROM   wp_posts wp 
WHERE  EXISTS (SELECT 1 
               FROM   wp_postmeta md 
               WHERE  md.post_id = wp.id 
                      AND wp.post_type = 'Product' 
                      AND md.meta_key = '_regular_price') 

0
投票

戈登·利诺夫是正确的( - 我会接受他的答案),我不小心从子查询中省略wp_posts.ID。解决办法是wp_posts.ID,添加到低阶子查询的SELECT列表,以便它可以在更高阶的子查询中选择:

(SELECT wp_posts.ID, wp_postmeta.post_id,post_title,post_type ,meta_value,
© www.soinside.com 2019 - 2024. All rights reserved.