|
| Problemer med SQL sætning Fra : Martin Kjelsmark |
Dato : 16-12-02 16:04 |
|
Hej Ng,
Jeg har lidt problemer med en SQL sætning, håber i kan hjælpe.
Sætningen ser ud som følgende:
select tekst, overskrift
from kalenderNoter
where ( oprettetuge = 52 and oprettetAar = 2002 )
or ( slettetUge = 52 and slettetAar = 2002 )
or 52 > (Select slettetUge from kalenderNoter where slettetUge is
Null )
Dette giver flg. fejl:
Subquery returned more than 1 value. This is not permitted when the
subquery follows =, !=, <, <= , >, >= or when the subquery is used as
an expression.
Jeg forstår godt fejlmeddelelsen, men kan ikke lige se hvordan jeg
ellers skal lave denne forespørgsel.
SQL sætningen skal bruges til at hente noter til en kalender, den skal
hente noter der er oprettet i den pågældende uge,år (oprettetUge,
oprettetAar), noter der er markeret som slettede, i den pågældende
uge, år (slettetUge, slettetAar), og til sidste skal den returnere de
gamle noter der ikke er slettede, og som er ældre en nuværende uge, år
(52, 2002).
mvh
Martin Kjelsmark
| |
Nis Jorgensen (16-12-2002)
| Kommentar Fra : Nis Jorgensen |
Dato : 16-12-02 18:49 |
|
On 16 Dec 2002 07:03:56 -0800, martin@kjelsmark.dk (Martin Kjelsmark)
wrote:
>Hej Ng,
>
>Jeg har lidt problemer med en SQL sætning, håber i kan hjælpe.
>
>Sætningen ser ud som følgende:
>
>select tekst, overskrift
>from kalenderNoter
>where ( oprettetuge = 52 and oprettetAar = 2002 )
> or ( slettetUge = 52 and slettetAar = 2002 )
> or 52 > (Select slettetUge from kalenderNoter where slettetUge is
>Null )
Den sidste linje er helt gal. For det første indeholder den ikke nogen
henvisning til den instans af kalenderNoter som du vælger rækker fra -
og derfor returnerer den enten True eller False for alle rækkerne.
Derudover vælger subquerien alle rækker hvor slettetUge er NULL -
hvilket kan være mere nul, en eller flere. Fra disse rækker vælges
feltet slettetUge - som altså er NULL. Denne liste af NULLS
sammenlignes så med tallet 52. Hvad er meningen?
>SQL sætningen skal bruges til at hente noter til en kalender, den skal
>hente noter der er oprettet i den pågældende uge,år (oprettetUge,
>oprettetAar), noter der er markeret som slettede, i den pågældende
>uge, år (slettetUge, slettetAar), og til sidste skal den returnere de
>gamle noter der ikke er slettede, og som er ældre en nuværende uge, år
>(52, 2002).
Noget i denne retning?
select tekst, overskrift
from kalenderNoter
where
( oprettetuge = 52 and oprettetAar = 2002 )
or ( slettetUge = 52 and slettetAar = 2002 )
or (
(oprettetAar < 2002 or (oprettetAar = 2002 and oprettetuge
<52))
and slettetuge IS NULL
)
--
Nis Jørgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
Martin Kjelsmark (17-12-2002)
| Kommentar Fra : Martin Kjelsmark |
Dato : 17-12-02 09:01 |
|
> Noget i denne retning?
>
> select tekst, overskrift
> from kalenderNoter
> where
> ( oprettetuge = 52 and oprettetAar = 2002 )
> or ( slettetUge = 52 and slettetAar = 2002 )
> or (
> (oprettetAar < 2002 or (oprettetAar = 2002 and oprettetuge
> <52))
> and slettetuge IS NULL
> )
Yup - Det var meget godt ramt, har lavet en lille ændring, og så
virkede det perfekt efter hensigten.
Tak for hjælpen!
select tekst, overskrift
from kalenderNoter
where ( oprettetuge = 50 and oprettetAar = 2002 and slettetUge IS NULL
)
or ( slettetUge = 50 and slettetAar = 2002 )
or ( (oprettetAar < 2002 or (oprettetAar = 2002 and oprettetuge <50))
and slettetuge IS NULL)
mvh
Martin Kjelsmark
| |
|
|