SQLite оставил соединение дважды на одном столе - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть таблица, в которой есть несколько столбцов, которые содержат идентификаторы для одной другой таблицы. Пример:

T1 {id,p1,p2,p3}
T2 {id,name}

Итак, p1, p2 и p3 являются идентификаторами от T2. То, что я хочу сделать, это выбрать все из T1 и иметь значение имени из T2.

Это то, что я сейчас использую:

select
     T1.id,T1.p1,T1.p2,T1.p3,
     T2a.name as p1_name,T2b.name as p2_name,T2c.name as p3_name
from
     T1 left join T2 as T2a on T1.p1=T2a.id
     left join T2 as T2b on T1.p2=T2b.id
     left join T2 as T2c on T1.p3=T2c.id;

Это как это должно быть сделано? Есть ли какие-то проблемы со скоростью, о которых мне следует беспокоиться?

Спасибо.

1 Ответ

3 голосов
/ 07 сентября 2011

Да, это правильный способ сделать это. Если вы знаете, что T2 будет иметь все правильные значения, вы можете использовать внутренние объединения вместо внешних:

select T1.id,
       T1.p1, T21.name as p1_name,
       T1.p2, T22.name as p2_name,
       T1.p3, T23.name as p3_name
from T1
join T2 as T21 on T1.p1 = T21.id,
join T2 as T22 on T1.p2 = T22.id,
join T2 as T23 on T1.p3 = T23.id

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

Производительность должна быть хорошей, это довольно стандартный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...