Я использую команду, которая запускается каждую секунду на node.js. Она имеет функцию исключения любых дубликатов записей для данного элемента, который указан в примере: AND t1.auction_id = 1335
.
DELETE FROM bid_account t1
WHERE t1.id < (Select max(t1.id) FROM bid_account t2 WHERE t1.bidding_price = t2.bidding_price) AND t1.auction_id = 1335;
Мне нужно, чтобы удалить запись, которая имеет равное значение в столбце bidding_price
, и сохранить только один. Но важно, чтобы он выполнял этот поиск не через таблицу, а скорее для определенного элемента, как я сообщал в начале, через столбец auction_id
.
Я попытался запустить указанную выше команду, но она возвращает следующую ошибку:
#1064 - You have a syntax error in your SQL next to 't1
WHERE t1.id < (Select max(t1.id) FROM bid_account t2 WHERE t1.bidding_price ' na linha 1
Что не так с этим запросом?
Я использую базу данных MYSQL, а таблица bid_account
имеет столбец id
как индекс и первичный.
Если я использую SELECT ниже, он обычно возвращает значения в двуличности.
SELECT bidding_price, count(*) FROM bid_account WHERE 'auction_id' = 1335 GROUP BY bidding_price Having Count(*) > 1
У вас есть две черты из MySQL. Во-первых, когда вы используете псевдоним для таблицы, он должен следовать DELETE
. Итак, это то, что вы намерены:
DELETE ba FROM bid_account ba
WHERE ba.id < (Select max(ba2.id) -- I assume you want the max from the innter reference
FROM bid_account ba2
WHERE ba2.bidding_price = ba.bidding_price
) AND
ba.auction_id = 1335;
Однако это все равно не будет работать, потому что вы ссылаетесь на bid_account
в таблице.
Итак, я думаю, вам нужно что-то большее:
DELETE ba
FROM bid_account ba JOIN
(SELECT ba2.auction_id, ba2.bidding_price, MAX(ba2.id) as max_id -- I assume you want the max from the innter reference
FROM bid_account ba2
WHERE ba2.auction_id = 1335
GROUP BY ba2.auction_id, ba2.bidding_price
) ba2
ON ba2.auction_id = ba.ba2.auction_id AND
ba2.bidding_price = ba.bidding_price AND
ba2.max_id > ba.id
WHERE ba.auction_id = 1335;
Это все еще не кажется мне полезным. Сравнение строк на основе bidding_price
кажется необычным. Я бы ожидал, что auction_id
станет частью матча. Я подозреваю, что вы хотите GROUP BY
и JOIN
на bidding_price
и auction_id
.
bid_account
есть много записей, тысячи, поэтому мне нужно что-то альтернативное, что не займет много времени для запуска, потому что в этом случае произойдет сбой.
WHERE ba.id < AND ba.auction_id = 1335;
Вы можете удалить строку с помощью псевдонима до ключевого слова в sql-запросе
например
удалите t из теста t, где t.id = 3
Таким образом, ваш запрос будет работать нормально DELETE t1 FROM bid_account t1 WHERE t1.id <(Выбрать max (t1.id) FROM bid_account t2 WHERE t1.bidding_price = t2.bidding_price) И t1.auction_id = 1335;