Mysql update с вложенным запросом join

У меня есть запрос на обновление:

UPDATE cash_billings_bills_articles 
    SET cash_billings_bills_articles.cashbillingbillarticle_cost = (SELECT articles_pricehistory.articlepricehistory_cost
                                            FROM articles_pricehistory
                                            LEFT JOIN cash_billings_bills
                                                 ON cash_billings_bills_articles.cashbillingbill_id = cash_billings_bills.cashbillingbill_id
                                            WHERE articles_pricehistory.article_id = cash_billings_bills_articles.article_id AND
                                                 articles_pricehistory.articlepricehistory_date <= cash_billings_bills.cashbillingbill_date
                                            ORDER BY articles_pricehistory.articlepricehistory_date DESC
                                            LIMIT 1
                                           );

Но я получил ошибку: Error Code: 1054. Unknown column 'cash_billings_bills_articles.cashbillingbill_id' in 'on clauseError Code: 1054. Unknown column 'cash_billings_bills_articles.cashbillingbill_id' in 'on clause' 0.000 sec

Обновление структур таблиц:

Введите описание изображения здесь

1 ответ

  1. Ваше условие соединения кажется неправильным .В запросе вы пытаетесь соединить таблицы articles_pricehistoryи cash_billings_billsпри условии

    cash_billings_bills_articles.cashbillingbill_id = cash_billings_bills.cashbillingbill_id
    

    где cash_billings_bills.cashbillingbill_idстолбец следует сравнить с некоторым столбцом articles_pricehistoryтаблицы не cash_billings_bills_articlesтаблица .

    Ваш запрос должен быть больше похож

    UPDATE cash_billings_bills_articles 
    SET 
        cash_billings_bills_articles.cashbillingbillarticle_cost = (SELECT 
                articles_pricehistory.articlepricehistory_cost
            FROM
                articles_pricehistory
                    LEFT JOIN
                cash_billings_bills_articles ON cash_billings_bills_articles.article_id = articles_pricehistory.article_id
                    LEFT JOIN
                cash_billings_bills ON cash_billings_bills_articles.cashbillingbill_id = cash_billings_bills.cashbillingbill_id
            WHERE
                articles_pricehistory.articlepricehistory_date <= cash_billings_bills.cashbillingbill_date
            ORDER BY articles_pricehistory.articlepricehistory_date DESC
            LIMIT 1)