2012-03-18 1 views
0

Чтобы сделать это легко, есть table1 (идентификатор, field1, other_table_id), table2 (идентификатор, field1) и Таблица3 (идентификатор, field1). У меня есть SELECT в таблице1, но в зависимости от значения поля1 = 2 или 3, он должен ПРИСОЕДИНИТЬСЯ с таблицей 2 или 3 ... (other_table_id - это либо идентификатор таблицы2, либо таблица3).MySQL: запрос в зависимости от значения поля - может ли CASE помочь построить ваш запрос?

Могу ли я использовать CASE для этого? Если нет, то как я могу сделать это лучше всего? Могу ли я сделать это в одном запросе?

спасибо, что заблаговременно!


PS: Я думаю, что это такая же тема: MySQL query where JOIN depends on CASE, но я не понял, решение. Кроме того, я не понимаю, как использовать СЛУЧАЙ из MySQL (http://dev.mysql.com/doc/refman/5.0/en/case-statement.html) ...


EDIT: Спасибо за ваш ответ, ypercube! Извините, я описал структуру не совсем правильно. На самом деле, таблица выглядит следующим образом:

table1: идентификатор, assigned_to, assigned_id rooms_assigned: идентификатор, objects_id, room_type_id объектов: идентификатор, ...

Итак, у меня есть идентификатор объекта в PHP $ object_id , так как вы используете это в WHERE в запросе?

Согласно вашему ответу, будет правильный запрос выглядеть тогда ?:

SELECT COALESCE (ra.objects_id, o.id) AS objects_id 
FROM table1 as t 
LEFT JOIN rooms_assigned AS ra 
ON (ra.id,2)=(t.assigned_id,t.assigned_to) 
LEFT JOIN objects AS o ON (o.id,3)=(t.assigned_id,t.assigned_to) 

WHERE ? 

EDIT 2: Я думаю, что решается вопрос о том «где» для себя. Я просто не использовал WHERE в запросе, но добавил его к «ON», например ON (ra.id, ra.object_id, 2) = (t.assigned_id, «. $ Object_id.», T.assigned_to) ...

Еще раз спасибо, вы очень помогли! :)

ответ

1

Используйте два LEFT соединения и COALESCE() в SELECT списке:

SELECT 
    COALESCE(t2.someColumn, t3.someColumn) AS someColumn 

FROM 
     table1 AS t 
    LEFT JOIN 
     table2 AS t2 
      ON (t2.id, 2) = (t.other_table_id, t.field1) 
    LEFT JOIN 
     table3 AS t3 
      ON (t3.id, 3) = (t.other_table_id, t.field1) 
+0

спасибо ypercube за ваш ответ, это очень здорово и легко понять! однако я забыл сказать, что мне нужно WHERE (см. править выше), как мне это реализовать? Спасибо! – Chris

+0

еще раз спасибо, ypercube, думаю, я решил это для себя! :) – Chris