2009-07-16 2 views
1

Скажем, у меня есть запрос, который извлекает [type] [show_name].
Для всех [типов] == 5 записей, мне нужно объединить их с другой таблицей.Проблема с дизайном: выборка данных для некоторых записей, которые я извлекаю в запросе sql

Что бы быть лучшим подходом для этого:

  1. Регистрация для всех записей между двумя таблицами (плохо выглядит).
  2. Запустите запрос, а затем снова запустите в результирующем наборе, извлеките все идентификаторы и выполните запрос IN в таблице, с которой мне нужно присоединиться.
  3. Извлечь отсутствующие данные только после того, как я представил (используя тот же запрос IN), возможно, с помощью подхода AJAX.
  4. Что-то, о чем я не думал.

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

ответ

2

Вы можете сделать left join и поместить в условие соединения условие type=5. Это вернет вас null в другой таблице, если type не 5.

select 
    a.type, 
    a.show_name, 
    b.whatever 
from 
    tableA a 
    left outer join tableB b on 
     a.id = b.id 
     and a.type = 5 

Это работает, потому что только присоединяется к записи с type=5. Если бы вы поставили a.type=5 внутри предложения where, это ограничило бы ваш результирующий набор теми, где type=5.

+0

Должно ли условие a.type = 5 быть выше условия a.id = b.id, или это не имеет значения? –

+1

не имеет значения, x и y точно совпадают с y и x. –

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