Mysql-запрос с условным объединением - PullRequest
0 голосов
/ 19 февраля 2012

Я застрял в запросе MySQL.У меня есть таблица временных заказов со следующей структурой:

session_id
product_id
product_type -- 'institute','state','region','country' 

Для всех institutes, states, regions и countries У меня есть отдельные таблицы.создать запрос MySQL, который выбирает данные из моей временной таблицы и выполняет соединение с соответствующей таблицей в зависимости от поля product_type.

Если я использую left join с 5 таблицами или union, это можетбыть действительно трудоемкой задачей;поэтому я искал что-то другое.

1 Ответ

2 голосов
/ 19 февраля 2012

Я бы посоветовал проверить ответы в этом вопросе, так как они, кажется, соответствуют вашей конкретной проблеме. https://stackoverflow.com/a/9327678/1213554

Хотя короткая версия такова, что для того, чтобы можно было эффективно выполнить этот запрос к базе данныхЯ боюсь, что может потребоваться реструктуризация.

То, что вы ищете конкретно, невозможно, вам придется использовать UNION, чтобы сделать что-то вроде следующего.Как вы говорите, это займет много времени.

(
    SELECT tempData.*
    FROM tempData
    INNER JOIN institutes 
    ON institutes.id = tempData.product_id
    WHERE tempData.product_type = 'institute'
) UNION (
    SELECT tempData.*
    FROM tempData
    INNER JOIN states 
    ON states.id = tempData.product_id
    WHERE tempData.product_type = 'state'
) UNION (
    SELECT tempData.*
    FROM tempData
    INNER JOIN regions
    ON regions.id = tempData.product_id
    WHERE tempData.product_type = 'region'
) UNION (
    SELECT tempData.*
    FROM tempData
    INNER JOIN countries
    ON countries.id = tempData.product_id
    WHERE tempData.product_type = 'country'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...