Re: Subselects to Joins? Or: how to design phone calls database

Поиск
Список
Период
Сортировка
От Viktor Bojović
Тема Re: Subselects to Joins? Or: how to design phone calls database
Дата
Msg-id CAJu1cLZ00Bejkwsktsuj=r9TNWKzOXodo0FP6bqJOiZX9BNEMA@mail.gmail.com
обсуждение исходный текст
Ответ на Subselects to Joins? Or: how to design phone calls database  (Mario Splivalo <mario.splivalo@megafon.hr>)
Список pgsql-sql
Hi Mario,<br />over - partition by will help. Iy that syntax is uncomfortable you can use multiple joins, using maximum
lengthor max(prefix::int) but that will slow down the process. select over - partition by is fastest solution i
think.<br/><br /><br /><br /><div class="gmail_quote">On Sat, Dec 10, 2011 at 11:24 PM, Mario Splivalo <span
dir="ltr"><<ahref="mailto:mario.splivalo@megafon.hr">mario.splivalo@megafon.hr</a>></span> wrote:<br
/><blockquoteclass="gmail_quote" style="border-left:1px solid rgb(204,204,204);margin:0pt 0pt 0pt
0.8ex;padding-left:1ex">I have a table called 'calls' which holds 'call detail records'. Let's<br /> assume the table
lookslike this:<br /><br /> CREATE TABLE cdr (<br />        call_id serial,<br />        phone_number text<br /> );<br
/><br/> And I have a table with country call prefixes, that looks like this:<br /><br /> CREATE TABLE prefixes (<br />
      prefix text,<br />        country text<br /> );<br /><br /> And now some test data:<br /><br /> INSERT INTO
prefixesVALUES ('1', 'USA');<br /> INSERT INTO prefixes VALUES ('44', 'UK');<br /> INSERT INTO prefixes VALUES ('385',
'Croatia');<br/> INSERT INTO prefixes VALUES ('387', 'Bosnia');<br /> INSERT INTO prefixes VALUES ('64', 'New
Zeland');<br/> INSERT INTO prefixes VALUES ('642', 'New Zeland Mobile');<br /> INSERT INTO calls VALUES (1,
'11952134451');<br/> INSERT INTO calls VALUES (2, '448789921342');<br /> INSERT INTO calls VALUES (3,
'385914242232');<br/> INSERT INTO calls VALUES (4, '385914242232');<br /> INSERT INTO calls VALUES (5,
'645122231241');<br/> INSERT INTO calls VALUES (6, '444122523421');<br /> INSERT INTO calls VALUES (7,
'64212125452');<br/> INSERT INTO calls VALUES (8, '1837371211');<br /> INSERT INTO calls VALUES (9, '11952134451');<br
/>INSERT INTO calls VALUES (10, '448789921342');<br /> INSERT INTO calls VALUES (11, '385914242232');<br /> INSERT INTO
callsVALUES (12, '385914242232');<br /> INSERT INTO calls VALUES (13, '645122231241');<br /> INSERT INTO calls VALUES
(14,'4441232523421');<br /> INSERT INTO calls VALUES (15, '64112125452');<br /> INSERT INTO calls VALUES (16,
'1837371211');<br/><br /><br /> Now, if I want to have a 'join' between those two tables, here is what I<br /> am doing
rightnow:<br /><br /> SELECT<br />        call_id,<br />        phone_number,<br />        (SELECT<br />              
 country<br/>        FROM<br />                prefixes<br />        WHERE<br />                calls.phone_number LIKE
prefix|| '%'<br />        ORDER BY<br />                length(prefix) DESC LIMIT 1<br />        ) AS country<br />
FROMcalls;<br /><br /><br /> Is there a way I could use join here? I can do something like:<br /><br /> SELECT ... FROM
callsJOIN prefixes ON calls.phone_number LIKE prefix || '%'<br /><br /> but I'd get duplicate rows there (for instance,
forNew Zeland calls,<br /> from my test data).<br /><br /> Or should I add 'prefix' field to the calls table, and then
doa inner<br /> join with prefixes table?<br /><br />        Mario<br /><font color="#888888"><br /> --<br /> Sent via
pgsql-sqlmailing list (<a href="mailto:pgsql-sql@postgresql.org">pgsql-sql@postgresql.org</a>)<br /> To make changes to
yoursubscription:<br /><a href="http://www.postgresql.org/mailpref/pgsql-sql"
target="_blank">http://www.postgresql.org/mailpref/pgsql-sql</a><br/></font></blockquote></div><br /><br clear="all"
/><br/>-- <br />---------------------------------------<br />Viktor Bojović<br
/>---------------------------------------<br/>Wherever I go, Murphy goes with me<br /> 

В списке pgsql-sql по дате отправления:

Предыдущее
От: Mario Splivalo
Дата:
Сообщение: Subselects to Joins? Or: how to design phone calls database
Следующее
От: Jasen Betts
Дата:
Сообщение: Re: conditional FROM