![]() |
![]() |
#1 |
Заслуженный Участник
|
![]()
дано:
таблички MASTER и MASTER_TEXT. последняя содержит TITLE для MASTER в разных языках. Код:
db2 => select * from master m, master_text t where t.master_oid = m.oid OID CODE OID MASTER_OID LANG TTILE ----------- ---------- ----------- ----------- ---------- --------------- 1 1 1 1 en english title 1 1 2 1 xyz default title 2 2 3 2 cz czek title 3 3 4 3 ch china title 3 3 5 3 zh zzzhina title 4 4 6 4 fr french title 4 4 7 4 en eng title 4 сделать выборку типа етой - мастер.оид,мастер.коде,техт.тайтл ... title м.б. _любой_ для данного мастера (первый попавшийся) Код:
db2 => select * from master m, master_text t where t.oid = (select oid from master_text tt where tt.master_oid=m.oid fetch first row only) OID CODE OID MASTER_OID LANG TTILE ----------- ---------- ----------- ----------- ---------- -------------------- 1 1 1 1 en english title 2 2 3 2 cz czek title 3 3 4 3 ch china title 4 4 6 4 fr french title а вот cloudscape так не умеет ![]() |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#2 |
Пенсионер всея Ирландея
|
![]() Код:
db2 => select * from master m, master_text t where t.oid IN (select oid from master_text tt where tt.master_oid=m.oid and rownum <2)
__________________
невозможно испугать санкциями того, кому похер, так,что санкции против меня на этом форуме, мне феерически похер |
![]() |
![]() |
![]() |
#3 | |
Заслуженный Участник
|
![]() Цитата:
![]() и IN низзя - каждому мастер нужно только _один_ тайтл (язык - любой) |
|
![]() |
![]() |
![]() |
#4 | |
Пенсионер всея Ирландея
|
![]() Цитата:
тогда если всетаки его можно ... то тока 1 и получится даже в случае IN'a
__________________
невозможно испугать санкциями того, кому похер, так,что санкции против меня на этом форуме, мне феерически похер |
|
![]() |
![]() |
![]() |
#6 |
Активный Участник
|
![]()
можно искусственно, через груп бай... что-то типа:
Код:
select m.oid, max(t.title) from master m, master_text t where t.master_oid = m.oid group by m.oid Код:
select m.oid, m.code, max(t.title) from master m, master_text t where t.master_oid = m.oid group by m.oid, m.code |
![]() |
![]() |
![]() |
#7 |
My name is Exaybachay
|
![]()
> ну и если надо "коде", то и его придется в групбай включить
через груп-бай и макс не выйдет включить из второй таблицы два поля из одной и той же записи а вложенные запросы c top там не работают? типа Код:
select *, (select top 1 * from master_text where master_oid = master.oid)) from master
__________________
митьки никого не хотят победить |
![]() |
![]() |
![]() |
#8 |
My name is Exaybachay
|
![]()
а вот еще бред воспаленного разума:
Код:
select m.*, mt1.* from master m inner join master_text mt1 on mt1.master_oid = m.oid inner join master_text mt2 on mt2.master_oid = m.oid and mt2.oid > mt1.oid group by mt2.oid having min(mt2.oid) <= mt1.oid
__________________
митьки никого не хотят победить |
![]() |
![]() |
![]() |
#9 |
Активный Участник
|
![]()
с агрегатными ф-циями не некоторых случаях можно извратиться (e.g. max(lang+"че-нить"+title), а потом разделить
![]() подзапросы в списке полей много где неработают ![]() но если можно в where, то: Код:
select * from master m, master_text t where t.master_oid = m.oid and t.oid = (select min(oid) from master_text tt where tt.master_oid = m.oid) Код:
select nt.oid, nt.code, nt.smthelse mt.* from master_text mt, (select m.oid, m.code, m.smthelse, min(t.oid) from master m, master_text t where t.master_oid = m.oid group by m.oid, m.code, m.smthelse) nt where mt.oid = nt.oid |
![]() |
![]() |
![]() |
#10 | |
Активный Участник
|
![]() Цитата:
![]() ![]() |
|
![]() |
![]() |
![]() |
#11 |
My name is Exaybachay
|
![]()
> с агрегатными ф-циями не некоторых случаях можно извратиться (e.g.
> max(lang+"че-нить"+title), а потом раздели а ну точно да ;) > идею понял, но m.*, mt1.* не сработаютWink их либо в груп-бай, либо > под агр. ф-цииWink а ну разумеется, я дурак, группировать-то надо по ним. ну тем не менее
__________________
митьки никого не хотят победить |
![]() |
![]() |
![]() |
#12 |
Заслуженный Участник
|
![]()
о! заработала
![]() Код:
select m.oid,m.code,t.lang,t.title from lwplms.master m, lwplms.master_text t, (select master_oid,substr(MX,2) as oid from (select master_oid,max(N) as MX from (select master_oid,lang, case when lang='fr' then 'Z'||oid when lang='en' then 'Y'||oid else 'X'||oid end as N from lwplms.master_text ) A group by master_oid ) B ) C where m.oid=c.master_oid and t.oid=c.oid тут такой задача был - выбрать TITLE для preferedLang (fr в нашем случае), если такого нет - берем english, если и того нет - хватаем любой для данного MASTER ... ща бум "причесывать" . |
![]() |
![]() |
![]() |
#13 |
My name is Exaybachay
|
![]()
я всегда утверждал, что сиквел - долгоиграющий ублюдок индустрии. ни красоты, ни читабельности, и на каждом шагу требуется изъ... ну короче применить чрезмерно сложное решения для простой проблемы, потому что простого решения не существует ;)
__________________
митьки никого не хотят победить |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#14 | |
Заслуженный Участник
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#15 |
My name is Exaybachay
|
![]()
> а ты лучше предложи что-то толковое
да предложить - не проблема. проблема в том что все на этот сиквел в той или иной реализации подсажены как на героин. и любое предложение канет в лету вместе с усилиями по его реализации. проще выражаясь не окупится.
__________________
митьки никого не хотят победить |
![]() |
![]() |