Re: join question
От | Stephan Szabo |
---|---|
Тема | Re: join question |
Дата | |
Msg-id | 20021018122739.Q27388-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | join question ("Frank Morton" <fmorton@base2inc.com>) |
Список | pgsql-sql |
On Fri, 18 Oct 2002, Frank Morton wrote: > For the SQL gurus, a query where I'm not getting the expected > results. Trying to write it using sql compatible with both postgres > and mysql. > > There are two tables: > > table = profile > int id > char name > > table = attribute > int id > int containerId > char name > char value > > Multiple attribute rows correspond to a single profile row where > attribute.containerId = profile.id > > These two queries result in one row being returned, which is > the expected result: > > select name from profile where ((profile.state='1020811')); > > select profile.name from profile,attribute where > (((attribute.name='description') and (attribute.value='1020704') and > (profile.id=attribute.containerId))); > > But, I thought this next query would just be a simple way to combine the two > queries with an "or" operator, still returning one row, actually returns > ALL rows of attribute: > > select profile.name from profile,attribute where > ((profile.state='1020811') or ((attribute.name='marketsegment') and > (attribute.value='1020704') and (profile.id=attribute.containerId))); > > Why doesn't this last query return just one row? Because for each combination of rows from profile and attribute where profile.state='1020811' the where clause is statisfied. I'm not sure what you're precisely trying to get out, since unless the row that matches each of the clauses is the same I don't see how you'd only get one row out with an or.
В списке pgsql-sql по дате отправления: