Неизвестный столбец «ID» в «списке полей», но столбец «IS» в списке - PullRequest
0 голосов
/ 06 февраля 2019

Ошибка:

Неизвестный столбец 'ID' в 'списке полей'

Я сбит с толку.Как вы можете видеть ниже, ID - это столбец в таблице wp_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 здесь

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Гордон Линофф прав (- я приму его ответ), я случайно пропустил wp_posts.ID из подзапроса.Решение состоит в том, чтобы добавить wp_posts.ID, в список SELECT в подзапросе нижнего порядка, чтобы его можно было выбрать в подзапросе высшего порядка:

(SELECT wp_posts.ID, wp_postmeta.post_id,post_title,post_type ,meta_value,
0 голосов
/ 06 февраля 2019

Вы можете упростить свой запрос, например, используя 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 голосов
/ 06 февраля 2019

Независимо от базы данных, у вас есть этот код:

                 (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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...