Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Что за вопрос: Как про-JOIN-ить >2 таблиц по полю id, если одно из них типа varchar?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Ситуация как я ее встретил:
Есть бааааальшая таблица с >30млн записей.
У нее есть поле id varchar(50) - пишутся PK других таблиц. В большинстве случаев PK это int, но есть случаи хешированных ключей и гуидов.

Нужно получить:
select et.id, bt.Anything from BigTable bt
  inner join SomeTable st on st.id = bt.id
  inner join ElseTable et on et.id = st.ElseTable_id
where et.id = 123123 and bt.Specific = 'SomeTable'


Здесь нас интересует таблица ElseTable т.к. по ней выборка. ключ id int.
основной затык в
  inner join SomeTable st on st.id = bt.id
  --или (30 млн =примерно 30 000 000 записей в BigTable, немногим более утешительно кол-во в SomeTable и ElseTable на порядок)
  inner join SomeTable st on cast (st.id as varchar(50)) = bt.id

Предположим, что все BigTable.id приводятся к int без проблем для SomeTable и пусть даже есть признак, по которому можно ограничить попадаемые из BigTable записи только по SomeTable (bt.Specific = 'SomeTable'). Но как только добавляется et.id=123123 - в отборе мы увидим все записи из BigTable (ну почти все, в общем существенно больше, и среди них будут с Id вовсе не int).

Соотв вопрос: как сие хозяйство проджойнить?
7 июн 12, 17:32    [12683694]     Ответить | Цитировать Сообщить модератору
 Re: Что за вопрос: Как про-JOIN-ить >2 таблиц по полю id, если одно из них типа varchar?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вы этот вопрос проектировщику базы задайте.
7 июн 12, 17:39    [12683740]     Ответить | Цитировать Сообщить модератору
 Re: Что за вопрос: Как про-JOIN-ить >2 таблиц по полю id, если одно из них типа varchar?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
а если option (force order) применить
и
select et.id, bt.Anything from BigTable bt
  inner join SomeTable st on  cast (st.id as varchar(50)) = bt.id
  inner join ElseTable et on et.id = st.ElseTable_id
where et.id = 123123 and bt.Specific = 'SomeTable'
7 июн 12, 17:48    [12683814]     Ответить | Цитировать Сообщить модератору
 Re: Что за вопрос: Как про-JOIN-ить >2 таблиц по полю id, если одно из них типа varchar?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Гавриленко Сергей Алексеевич
Вы этот вопрос проектировщику базы задайте.
Ну вопросами этого не решишь. Я бы конечно разделил яйца и куриц...

Мистер Хенки, а в чем разница с force order если все равно cast(st.id as varchar())?
Объясните, только как тупому плиз.
7 июн 12, 18:09    [12683937]     Ответить | Цитировать Сообщить модератору
 Re: Что за вопрос: Как про-JOIN-ить >2 таблиц по полю id, если одно из них типа varchar?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Мистер Хенки
а если option (force order) применить
и
select et.id, bt.Anything from BigTable bt
  inner join SomeTable st on  cast (st.id as varchar(50)) = bt.id
  inner join ElseTable et on et.id = st.ElseTable_id
where et.id = 123123 and bt.Specific = 'SomeTable'
Тогда наверное и bt.Specific надо указывать не в конце?
7 июн 12, 18:13    [12683961]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить