Home > Archive > Microsoft SQL Server forum > December 2005 > Need help with a join









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Need help with a join
Danielle

2005-12-27, 8:24 pm

Hello group-
I am having a problem where joined tables are returning too many rows.
Here is my scenario -

I am trying to create a temporary table from parts of three tables -
the important columns are:

a.id
a.tran_date

b.id
b.geo

c.holiday_date
c.geo

My query is like this

select a.col1, b.col1 from a
inner join b on a.id = b.id
inner join c on c.geo = b.geo


With the parameters that I have, I get 144 rows with just the join of
tables a & b.

However, when I add the join to table c, I get 720 rows - there are (of
course) 5 rows in table c where the geo is the same as the geo in table
b.

The reason for the join is that I need to know if a.tran_date =
c.holiday_date and holidays differ by GEO.

I don't want this added information. Thoughts on what I am doing wrong?

Please let me know if you need more information

Thanks-
Danielle

David Portas

2005-12-27, 8:24 pm

Danielle wrote:

> Hello group-
> I am having a problem where joined tables are returning too many rows.
> Here is my scenario -
>
> I am trying to create a temporary table from parts of three tables -
> the important columns are:
>
> a.id
> a.tran_date
>
> b.id
> b.geo
>
> c.holiday_date
> c.geo
>
> My query is like this
>
> select a.col1, b.col1 from a
> inner join b on a.id = b.id
> inner join c on c.geo = b.geo
>
>
> With the parameters that I have, I get 144 rows with just the join of
> tables a & b.
>
> However, when I add the join to table c, I get 720 rows - there are (of
> course) 5 rows in table c where the geo is the same as the geo in table
> b.
>
> The reason for the join is that I need to know if a.tran_date =
> c.holiday_date and holidays differ by GEO.
>
> I don't want this added information. Thoughts on what I am doing wrong?
>
> Please let me know if you need more information
>
> Thanks-
> Danielle


Please post DDL and sample data, otherwise any answers you get will
just be guesswork. See:
http://www.aspfaq.com/etiquette.asp?id=5006

My guess is that you can use EXISTS or NOT EXISTS instead of a JOIN to
C. Your spec is too vague for me to be sure though.

--
David Portas
SQL Server MVP
--

John Bell

2005-12-28, 11:24 am

Hi Danielle

I am not sure what you mean by holidays differ by GEO!

Maybe you are wanting to extend the join clause to eliminate rows where the
dates don't match?
e.g.
select a.col1, b.col1
from a
join b on a.id = b.id
join c on c.geo = b.geo AND a.tran_date = c.holiday_date

Otherwise please post DDL, Sample data and expected output as David
reqested.

John
"Danielle" <wxbuff@aol.com> wrote in message
news:1135727193.175900.59790@o13g2000cwo.googlegroups.com...
> Hello group-
> I am having a problem where joined tables are returning too many rows.
> Here is my scenario -
>
> I am trying to create a temporary table from parts of three tables -
> the important columns are:
>
> a.id
> a.tran_date
>
> b.id
> b.geo
>
> c.holiday_date
> c.geo
>
> My query is like this
>
> select a.col1, b.col1 from a
> inner join b on a.id = b.id
> inner join c on c.geo = b.geo
>
>
> With the parameters that I have, I get 144 rows with just the join of
> tables a & b.
>
> However, when I add the join to table c, I get 720 rows - there are (of
> course) 5 rows in table c where the geo is the same as the geo in table
> b.
>
> The reason for the join is that I need to know if a.tran_date =
> c.holiday_date and holidays differ by GEO.
>
> I don't want this added information. Thoughts on what I am doing wrong?
>
> Please let me know if you need more information
>
> Thanks-
> Danielle
>



manstein

2005-12-28, 8:24 pm

Hello Danielle

"The reason for the join is that I need to know if a.tran_date =
c.holiday_date and holidays differ by GEO."

Im not sure what you want since this is a bit cryptic but is this code
similar to what you need?

select distinct
a.col1,
b.col1
from a
inner join b on b.id = a.id
inner join c on c.holiday_date= a.tran_date
where b.geo<>c.geo;

Also, you showed some concern about the number of rows returned. Use
"distinct" keyword to get unique records and a more concise number of
rows.

best regards

Sponsored Links





Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive | Programming forum archive

Copyright 2008 droptable.com