Обсуждение: SELECT Query
Below is the result of a query on my table. I want to only return those
transactions that have a chart_id=10074, and if trans_id 10088 is one of
those, I want to return all 3 rows with that trans_id.
accs=# select * from acc_trans;
trans_id | chart_id | amount | transdate | source | cleared |
fx_transaction
----------+----------+----------+------------+--------------+---------+----------------
10088 | 10004 | -2062.12 | 2002-03-01 | | f | f
10088 | 10037 | 1755 | 2002-03-01 | | f | f
10088 | 10074 | 307.12 | 2002-03-01 | | f | f
10092 | 10004 | -528.75 | 2002-03-12 | | f | f
10092 | 10037 | 450 | 2002-03-12 | | f | f
10092 | 10074 | 78.75 | 2002-03-12 | | f | f
10088 | 10004 | 2062.12 | 2002-03-07 | | f | f
10088 | 10002 | -2062.12 | 2002-03-07 | | f | f
10096 | 10016 | 1169.75 | 2002-03-12 | | f | f
10096 | 10047 | -1169.75 | 2002-03-12 | | f | f
10096 | 10002 | 1169.75 | 2002-03-11 | | f | f
10096 | 10016 | -1169.75 | 2002-03-11 | | f | f
10098 | 10016 | 283.91 | 2002-03-12 | | f | f
10098 | 10044 | -283.91 | 2002-03-12 | | f | f
10099 | 10016 | 137.6 | 2002-03-12 | | f | f
10099 | 10045 | -137.6 | 2002-03-12 | | f | f
10100 | 10016 | 163.74 | 2002-03-12 | | f | f
10100 | 10046 | -163.74 | 2002-03-12 | | f | f
10092 | 10004 | 528.75 | 2002-03-20 | | f | f
10092 | 10002 | -528.75 | 2002-03-20 | | f | f
10101 | 10004 | -528.75 | 2002-03-20 | | f | f
10101 | 10037 | 450 | 2002-03-20 | | f | f
10101 | 10074 | 78.75 | 2002-03-20 | | f | f
Regards
Scott
On Fri, Nov 01, 2002 at 11:58:23AM +0000, Scott Taylor wrote:
> Below is the result of a query on my table. I want to only return those
> transactions that have a chart_id=10074, and if trans_id 10088 is one of
> those, I want to return all 3 rows with that trans_id.
Hmm...
select * from acc_trans where trans_id in
(select trans_id from acc_trans where chart_id = 10074);
You can rewrite that as an EXISTS query, but it should work fine.
Hope this helps,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/
> There are 10 kinds of people in the world, those that can do binary
> arithmetic and those that can't.
Вложения
On Friday 01 Nov 2002 11:58 am, Scott Taylor wrote: > Below is the result of a query on my table. I want to only return those > transactions that have a chart_id=10074, and if trans_id 10088 is one of > those, I want to return all 3 rows with that trans_id. Also, check the pgsql-sql list for the question yesterday "How do you write this query?" posted by Wei Weng. -- Richard Huxton
select * from acc_trans where chart_id = 10074 union select * from acc_trans where tx_transaction = 10088 and exists ( select * from acc_trans where tx_transaction = 10088 and chart_id = 10074); Scott Taylor wrote: > > Below is the result of a query on my table. I want to only return those > transactions that have a chart_id=10074, and if trans_id 10088 is one of > those, I want to return all 3 rows with that trans_id. > > accs=# select * from acc_trans; > trans_id | chart_id | amount | transdate | source | cleared | > fx_transaction > ----------+----------+----------+------------+--------------+---------+---------------- > 10088 | 10004 | -2062.12 | 2002-03-01 | | f | f > 10088 | 10037 | 1755 | 2002-03-01 | | f | f > 10088 | 10074 | 307.12 | 2002-03-01 | | f | f > 10092 | 10004 | -528.75 | 2002-03-12 | | f | f > 10092 | 10037 | 450 | 2002-03-12 | | f | f > 10092 | 10074 | 78.75 | 2002-03-12 | | f | f > 10088 | 10004 | 2062.12 | 2002-03-07 | | f | f > 10088 | 10002 | -2062.12 | 2002-03-07 | | f | f > 10096 | 10016 | 1169.75 | 2002-03-12 | | f | f > 10096 | 10047 | -1169.75 | 2002-03-12 | | f | f > 10096 | 10002 | 1169.75 | 2002-03-11 | | f | f > 10096 | 10016 | -1169.75 | 2002-03-11 | | f | f > 10098 | 10016 | 283.91 | 2002-03-12 | | f | f > 10098 | 10044 | -283.91 | 2002-03-12 | | f | f > 10099 | 10016 | 137.6 | 2002-03-12 | | f | f > 10099 | 10045 | -137.6 | 2002-03-12 | | f | f > 10100 | 10016 | 163.74 | 2002-03-12 | | f | f > 10100 | 10046 | -163.74 | 2002-03-12 | | f | f > 10092 | 10004 | 528.75 | 2002-03-20 | | f | f > 10092 | 10002 | -528.75 | 2002-03-20 | | f | f > 10101 | 10004 | -528.75 | 2002-03-20 | | f | f > 10101 | 10037 | 450 | 2002-03-20 | | f | f > 10101 | 10074 | 78.75 | 2002-03-20 | | f | f > > Regards > > Scott > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster
In article <200211011158.23530.scott.taylor@4i-dotcom.com>, Scott Taylor wrote:
> Below is the result of a query on my table. I want to only return those
> transactions that have a chart_id=10074, and if trans_id 10088 is one of
> those, I want to return all 3 rows with that trans_id.
>
SELECT * FROM acc_trans
WHERE
chart_id=10074
OR
trans_id IN (SELECT trans_id FROM acc_trans WHERE chart_id=10074)
;
I think that is what you want.
If it is slow, look at using EXISTS instead of IN.
> accs=# select * from acc_trans;
> trans_id | chart_id | amount | transdate | source | cleared |
> fx_transaction
> ----------+----------+----------+------------+--------------+---------+----------------
> 10088 | 10004 | -2062.12 | 2002-03-01 | | f | f
> 10088 | 10037 | 1755 | 2002-03-01 | | f | f
> 10088 | 10074 | 307.12 | 2002-03-01 | | f | f
> 10092 | 10004 | -528.75 | 2002-03-12 | | f | f
> 10092 | 10037 | 450 | 2002-03-12 | | f | f
> 10092 | 10074 | 78.75 | 2002-03-12 | | f | f
> 10088 | 10004 | 2062.12 | 2002-03-07 | | f | f
> 10088 | 10002 | -2062.12 | 2002-03-07 | | f | f
> 10096 | 10016 | 1169.75 | 2002-03-12 | | f | f
> 10096 | 10047 | -1169.75 | 2002-03-12 | | f | f
> 10096 | 10002 | 1169.75 | 2002-03-11 | | f | f
> 10096 | 10016 | -1169.75 | 2002-03-11 | | f | f
> 10098 | 10016 | 283.91 | 2002-03-12 | | f | f
> 10098 | 10044 | -283.91 | 2002-03-12 | | f | f
> 10099 | 10016 | 137.6 | 2002-03-12 | | f | f
> 10099 | 10045 | -137.6 | 2002-03-12 | | f | f
> 10100 | 10016 | 163.74 | 2002-03-12 | | f | f
> 10100 | 10046 | -163.74 | 2002-03-12 | | f | f
> 10092 | 10004 | 528.75 | 2002-03-20 | | f | f
> 10092 | 10002 | -528.75 | 2002-03-20 | | f | f
> 10101 | 10004 | -528.75 | 2002-03-20 | | f | f
> 10101 | 10037 | 450 | 2002-03-20 | | f | f
> 10101 | 10074 | 78.75 | 2002-03-20 | | f | f
>
> Regards
>
> Scott
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster