2013-02-20 2 views
-1

У меня есть таблица с идентификаторами столбцов, product_type, product_id, количество все как целое. Мне нужно выбрать данные из других таблиц в зависимости от product_type. Например. Если product_type равно 0, тогда выберите из таблицыA, если product_type равен 1, затем выберите из tableB и т. Д. Я попытался найти решение, как создать выбор, но безуспешно. Может кто-то мне помочь, пожалуйста. Я ценю любую помощь. Спасибо.SQLite select from mutliple tables на основе значения столбца

+3

Пожалуйста, измените свой пост, чтобы включить одну из ваших попыток решения. Спасибо. – bernie

+1

Дополнительная информация. Пожалуйста, покажите структуры таблиц и укажите, какие столбцы вы хотите увидеть в наборе результатов. –

+2

, как правило, это указывает на недостаток в структуре вашего БД, когда вам нужно делать запросы, которые динамически выбирают исходную таблицу. Покажите свой полный дизайн базы данных и, возможно, мы сможем помочь. – JohnFx

ответ

3

Вступите в основную таблицу с отдельными таблицами продуктов, но используйте левое соединение и включите фильтр product_type = x в состояние соединения, так что на самом деле соединяются только нужные записи.

Это приведет к множеству значений NULL; использовать coalesce, чтобы получить не- NULL значение для выхода:

SELECT sales.id, 
     sales.quantity, 
     sales.product_type, 
     coalesce(tableA.name, tableB.name) AS name, 
     coalesce(tableA.color, tableB.color) AS color, 
     tableA.numberOfAs    -- is NULL for other product types 
FROM sales 
    LEFT JOIN tableA ON sales.product_type = 0 AND 
         sales.product_id = tableA.product_id 
    LEFT JOIN tableB ON sales.product_type = 1 AND 
         sales.product_id = tableB.product_id 
WHERE ... 
+0

У меня возникнет соблазн превратить это в представление, которое я мог бы сделать простым выбором ... –

0

Похоже, вам нужно сазе

SELECT 
    CASE 
     WHEN product_type = 1 THEN (SELECT column FROM table1 WHERE ...) 
     WHEN product_type = 2 THEN (SELECT column FROM table2 WHERE ...) 
    END 
FROM table 

Вероятно, можно было бы сделать более эффективным использованием JOINS, но это будет зависеть от вашей схемы.

+0

Я думаю, что OP хочет выбрать более одного поля из 'TableA',' TableB' в зависимости от product_type в 'table', а не только из одного поля – Saju

+0

Затем более одного оператора CASE. –

Смежные вопросы