Я нашел этот вопрос в поиске собственного решения очень сложного соединения. Это альтернативное решение более сложной версии проблемы, которая, на мой взгляд, может оказаться полезной.
Мне нужно было заполнить поле product_id в таблице действий, где действия пронумерованы в единице, а единицы пронумерованы на уровне (идентифицированном с помощью строки ?? N), так что можно идентифицировать действия с использованием SKU, т.е. L1U1A1. Эти SKU затем хранятся в другой таблице.
Я определил следующее, чтобы получить список action_id и product_id: -
SELECT a.activity_id, w.product_id
FROM activities a
JOIN units USING(unit_id)
JOIN product_types USING(product_type_id)
JOIN web_products w
ON sku=CONCAT('L',SUBSTR(product_type_code,3), 'U',unit_index, 'A',activity_index)
Я обнаружил, что это слишком сложно для включения в SELECT в mysql, поэтому я создал временную таблицу и соединил ее с помощью оператора обновления: -
CREATE TEMPORARY TABLE activity_product_ids AS (<the above select statement>);
UPDATE activities a
JOIN activity_product_ids b
ON a.activity_id=b.activity_id
SET a.product_id=b.product_id;
Я надеюсь, что кто-то найдет это полезным