Avatar billede greew Nybegynder
08. januar 2007 - 15:30 Der er 1 løsning

UNION query fejl

Hejsa,

Jeg forsøger mig med følgende query:

SELECT
    o.opkraevningid AS opkraevningid,
    o.userid AS userid,
    o.dato AS dato,
    o.pris AS amount,
    o.boghandler AS boghandler
FROM
    opkraevninger o
WHERE
    o.opkraevningid IN (
        (
            SELECT
                pf.opkraevningid AS id
            FROM
                payment_fik pf
            WHERE
                UNIX_TIMESTAMP(pf.bookkeepingdate) >= '1161640800' AND
                UNIX_TIMESTAMP(pf.bookkeepingdate) < '1161727199'
        )
UNION (
            SELECT
                pt.opkraevningid AS id
            FROM
                payment_transactions pt
            WHERE
                UNIX_TIMESTAMP(pt.capturedate) >= '1161640800' AND
                UNIX_TIMESTAMP(pt.capturedate) < '1161727199' AND
                captured = '1'
        )
    )
GROUP BY
    o.opkraevningid
ORDER BY
    opkraevningid asc

Men får følgende fejl:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION (  SELECT  pt . opkraevningid AS id  FROM  payment_transactions pt  WHERE ' at line 1

Noget tyder altså på at parseren brokker sig over at UNION står, hvor den gør. Men hvorfor??

Er der en venlig sjæl, der kan hjælpe mig med at forkorte min dag? :)

Mvh.
Jesper
Avatar billede greew Nybegynder
08. januar 2007 - 15:45 #1
Ok.. jeg forstår ikke hvorfor, men jeg løste problemet ved at fjerne () om hver af de to SELECT statements i IN() clause.

Resultatet blev
SELECT
    o.opkraevningid AS opkraevningid,
    o.userid AS userid,
    o.dato AS dato,
    o.pris AS amount,
    o.boghandler AS boghandler
FROM
    opkraevninger o
WHERE
    o.opkraevningid IN (
            SELECT
                pf.opkraevningid AS id
            FROM
                payment_fik pf
            WHERE
                UNIX_TIMESTAMP(pf.bookkeepingdate) >= '1161640800' AND
                UNIX_TIMESTAMP(pf.bookkeepingdate) < '1161727199'
UNION
            SELECT
                pt.opkraevningid AS id
            FROM
                payment_transactions pt
            WHERE
                UNIX_TIMESTAMP(pt.capturedate) >= '1161640800' AND
                UNIX_TIMESTAMP(pt.capturedate) < '1161727199' AND
                captured = '1'
    )
GROUP BY
    o.opkraevningid
ORDER BY
    opkraevningid asc
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester