Помогите с ошибкой в sql запросе

Тема в разделе "Базы данных", создана пользователем Monterpan, 1 ноя 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    Требуется в зависимости от значения записи в таблице подключать разные таблицы.
    Т.е. если table1.mattype = 'zav' сделать
    JOIN `table2`
    если table1.mattype = 'art' сделать
    JOIN `table3`
    Этот запрос по идее должен делать такое:
    PHP:
    SELECT `t1`.*, `t2`.* FROM `table1` AS `t1`
     
    LEFT JOIN  (CASE t1.mattype 
            WHEN 
    'zav' THEN `table2
            
    WHEN 'art' THEN `table3`
            ELSE 
    NULL 
        END 
    ) AS `t2ON t1.matid t2.id WHERE (t1.mattype <> ''LIMIT 5
    но возникает ошибка:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE t1.mattype WHEN 'zav' THEN `table2` WHEN 'art' THEN `table3`' at line 3
     
  2. sema

    sema Постоялец

    Регистр.:
    18 май 2007
    Сообщения:
    95
    Симпатии:
    21
    Я не гуру в SQL и Может не правильно понял задачу, но что-то типа такого работать должно
    PHP:
    SELECT t1.*, 
      CASE 
       
    WHEN id =1 THEN (select value from ps where ps.id=t1.id)
       
    WHEN id =2 THEN (select value from ps2 where ps2.id=t1.id)
       ELSE (
    select 0 from ps3 where ps3.id=t1.id)
      
    END from ps_configuration t1
     
    Monterpan нравится это.
  3. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    То что нужно. Спасибо.
    Конечный запрос получился таким:
    PHP:
    SELECT `t1`.*, 
      CASE  
       
    WHEN `t1`.mattype ='zav' THEN (select id from `table2` as `t2where `t1`.matid=`t2`.id
       
    WHEN `t1`.mattype ='art' THEN (select id from `table3` as `t2where `t1`.matid=`t2`.id
       ELSE (
    select 0 
      
    END FROM `table1` AS `t1`
    WHERE (t1.mattype <> ''LIMIT 5
     
Статус темы:
Закрыта.