Ваша основная проблема заключается в том, что вы пропускаете предложение «ON» в своем объединении и пытаетесь выполнить то же самое, используя предложение «WHERE» в своем подзапросе.
a.auctionID не существует в контексте подзапроса SELECT bidding_price, user_id, auction_id FROM bid_account WHERE auction_id = a.auctionID ...
, поэтому выдает ошибку.
Попробуйте так, вместо этого:
UPDATE
auction AS a
INNER JOIN
/* Find the highest (max) bidpack_buy_date for each auction */
(SELECT MAX(bidpack_buy_date) AS `Max Date`, auction_id FROM bid_account GROUP BY auction_id) AS maxdates
ON
maxdates.auction_id = a.auctionID
INNER JOIN
/* The data from bid_acount that accompanies the max dates found above */
bid_account AS ult_lance_a
ON
ult_lance_a.bidpack_buy_date = maxdates.`Max Date`
AND
ult_lance_a.auction_id = maxdates.auction_ID
SET
a.auc_final_price = ult_lance_a.bidding_price,
a.buy_user = ult_lance_a.user_id
Код, который я использовал для настройки теста:
DROP TABLE IF EXISTS bid_account;
CREATE TABLE IF NOT EXISTS bid_account (
auction_id int,
user_id int,
bidding_price numeric(8,2),
bidpack_buy_date DATETIME
);
DROP TABLE IF EXISTS auction;
CREATE TABLE IF NOT EXISTS auction (
auctionID int,
buy_user int,
auc_final_price numeric(8,2)
);
INSERT INTO
bid_account
(auction_id, user_id, bidding_price, bidpack_buy_date)
VALUES
(1,1, 10.00, '2017-01-01 12:00:01 PM'),
(1,2, 20.00, '2017-01-01 12:00:02 PM'),
(1,3, 30.00, '2017-01-01 12:00:03 PM'),
(1,4, 40.00, '2017-01-01 12:00:04 PM'),
(2,1, 10.00, '2017-01-01 12:00:01 PM'),
(2,2, 20.00, '2017-01-01 12:00:02 PM'),
(2,3, 30.00, '2017-01-01 12:00:03 PM');
INSERT INTO
auction
(auctionID)
VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7);