Обсуждение: Help on SQL query

Поиск
Список
Период
Сортировка

Help on SQL query

От
Ian Tan
Дата:
Hello,

I am stuck on trying to write a SQL query (PostgreSQL 10.6) that I
cannot get my head around, and I cannot find anything after googling
for a while.

There are 2 tables:

CREATE TABLE car_parts (
    id integer PRIMARY KEY,
    name text
);

CREATE TABLE bill_of_materials (
    parent_id integer REFERENCES car_parts (id),
    child_id integer REFERENCES car_parts (id)
);

SELECT * FROM car_parts;
id | name
---------------------
01 | "Assembled 4WD"
02 | "Assembled 2WD"
03 | "V8 Engine"
04 | "V6 Engine"
05 | "Tow Bar"

SELECT * FROM bill_of_materials;

parent_id | child_id
--------------------
01        | 03
01        | 05
02        | 04
02        | 05

Question is,

How do I write an SQL query so that the "name" text in car_parts are
added to the bill_of_materials table, so that it looks like this:

parent_id | parent_name      | child_id | child_name
------------------------------------------------------
01        | "Assembled 4WD"  | 03       | "V8 Engine"
01        | "Assembled 4WD"  | 05       | "Tow Bar"
02        | "Assembled 2WD"  | 04       | "V6 Engine"
02        | "Assembled 2WD"  | 05       | "Tow Bar"

Thank you.

Regards,
Ian


Re: Help on SQL query

От
Andrew Gierth
Дата:
>>>>> "Ian" == Ian Tan <iantan1268@gmail.com> writes:

 Ian> How do I write an SQL query so that the "name" text in car_parts
 Ian> are added to the bill_of_materials table, so that it looks like
 Ian> this:

The only trick with this is that you need to join the car_parts table
twice (once for parent and once for child), and to do that you need to
give it different alias names:

select bom.parent_id,
       ppart.name as parent_name,
       bom.child_id,
       cpart.name as child_name
  from bill_of_materials bom
  join car_parts ppart on (ppart.id=bom.parent_id)
  join car_parts cpart on (cpart.id=bom.child_id);

-- 
Andrew (irc:RhodiumToad)


Re: Help on SQL query

От
Rob Sargent
Дата:

> On Feb 15, 2019, at 10:28 AM, Andrew Gierth <andrew@tao11.riddles.org.uk> wrote:
>
>>>>>> "Ian" == Ian Tan <iantan1268@gmail.com> writes:
>
> Ian> How do I write an SQL query so that the "name" text in car_parts
> Ian> are added to the bill_of_materials table, so that it looks like
> Ian> this:
>
> The only trick with this is that you need to join the car_parts table
> twice (once for parent and once for child), and to do that you need to
> give it different alias names:
>
> select bom.parent_id,
>       ppart.name as parent_name,
>       bom.child_id,
>       cpart.name as child_name
>  from bill_of_materials bom
>  join car_parts ppart on (ppart.id=bom.parent_id)
>  join car_parts cpart on (cpart.id=bom.child_id);
>
> --
> Andrew (irc:RhodiumToad)
>

Andrew, will you do my homework too?

Re: Help on SQL query

От
Ian Tan
Дата:
Hello Andrew,
Thank you, I appreciate your response and your help.

Hello Rob,
I learn in my own time and had no one to ask. If pgsql-sql is not the
correct forum for these kinds of question, kindly let me know.

Thank you.

Regards,
Ian

On Fri, 15 Feb 2019 at 17:38, Rob Sargent <robjsargent@gmail.com> wrote:
>
>
>
> > On Feb 15, 2019, at 10:28 AM, Andrew Gierth <andrew@tao11.riddles.org.uk> wrote:
> >
> >>>>>> "Ian" == Ian Tan <iantan1268@gmail.com> writes:
> >
> > Ian> How do I write an SQL query so that the "name" text in car_parts
> > Ian> are added to the bill_of_materials table, so that it looks like
> > Ian> this:
> >
> > The only trick with this is that you need to join the car_parts table
> > twice (once for parent and once for child), and to do that you need to
> > give it different alias names:
> >
> > select bom.parent_id,
> >       ppart.name as parent_name,
> >       bom.child_id,
> >       cpart.name as child_name
> >  from bill_of_materials bom
> >  join car_parts ppart on (ppart.id=bom.parent_id)
> >  join car_parts cpart on (cpart.id=bom.child_id);
> >
> > --
> > Andrew (irc:RhodiumToad)
> >
>
> Andrew, will you do my homework too?


Re: Help on SQL query

От
Rob Sargent
Дата:
On 2/15/19 11:16 AM, Ian Tan wrote:
> Hello Andrew,
> Thank you, I appreciate your response and your help.
>
> Hello Rob,
> I learn in my own time and had no one to ask. If pgsql-sql is not the
> correct forum for these kinds of question, kindly let me know.
>
> Thank you.
>
> Regards,
> Ian
>
> On Fri, 15 Feb 2019 at 17:38, Rob Sargent <robjsargent@gmail.com> wrote:
>>
>>
>>> On Feb 15, 2019, at 10:28 AM, Andrew Gierth <andrew@tao11.riddles.org.uk> wrote:
>>>
>>>>>>>> "Ian" == Ian Tan <iantan1268@gmail.com> writes:
>>> Ian> How do I write an SQL query so that the "name" text in car_parts
>>> Ian> are added to the bill_of_materials table, so that it looks like
>>> Ian> this:
>>>
>>> The only trick with this is that you need to join the car_parts table
>>> twice (once for parent and once for child), and to do that you need to
>>> give it different alias names:
>>>
>>> select bom.parent_id,
>>>        ppart.name as parent_name,
>>>        bom.child_id,
>>>        cpart.name as child_name
>>>   from bill_of_materials bom
>>>   join car_parts ppart on (ppart.id=bom.parent_id)
>>>   join car_parts cpart on (cpart.id=bom.child_id);
>>>
>>> --
>>> Andrew (irc:RhodiumToad)
>>>
>> Andrew, will you do my homework too?

My apologies.  It looked suspiciously like a homework question to me.