On Tue, 10 Aug 2004 14:56:06 +0300, mocanu silviu <[EMAIL PROTECTED]> wrote:
> Claudiu Cismaru wrote:
>
> >>experimental s-a constatat ca nu merge varianta de mai jos:
> >>mysql> select distinct ID from tools where tool like '%ABC%' and tool
> >>like '%DEF%';
> >>Empty set (0.01 sec)
> >>
> >>
> >
> >Pentru ca-ti lipseste gandirea logica din programare (si nu neaparat)...
> >
> >Raspunsul corect este OR nu AND!
> >
> >
> >
> mysql> select ID from tools where tool='ABC' or tool='DEF';
> +-------------+
> | ID |
> +-------------+
> | 25 |
> | 25 |
> | 24 |
> +-------------+
> 3 rows in set (0.00 sec)
>
> examinind tabelul initial:
>
> +----------------|---------+
> | id | tool |
> +----------------|----------|
> | 25 | ABC |
> | 25 | DEF |
> | 24 | ABC |
>
>
> se vede cu ochiul liber ca id=24 nu satisface conditia "DEF". probabil
> trebuia sa formulez intrebarea initiala astfel:
>
> cum ar trebui sa arate un select care sa returneze acele "id" pentru
> care acelasi exista ATIT linii cu tool="ABC" CIT SI tool="DEF" ?
>
>
>
>
> ---
> Detalii despre listele noastre de mail: http://www.lug.ro/
>
>
Aceasta tabela nu este normalizata si ca si consecinta, unele query-uri se
exprima "peste mana".
select
distinct z1.id
from
(select distinct id from ztmp1) z1,
ztmp1 z2,
ztmp1 z3
where
z1.id = z2.id
and z1.id = z3.id
and
(
(z2.tool = 'ABC' and z3.tool = 'DEF') or
(z2.tool = 'DEF' and z3.tool = 'ABC')
)
SAU
select id from
(
select
distinct z1.id, z1.tool
from
ztmp1 z1
where
tool in ('ABC', 'DEF')
group by
id, tool
) z2
group by id
having count(*) = 2
;
Sunt sigur ca exista solutii si mai simple. Ce am scris mai sus
e testat pe oracle, nu am la indemana mysql, nu stiu cat de bine
suporta subquery, dar se poate emula.
peace,
_bogdan_
---
Detalii despre listele noastre de mail: http://www.lug.ro/