Avatar billede Slettet bruger
25. februar 2009 - 00:57 Der er 5 kommentarer og
1 løsning

Visning afhængig af anden tabel (del 2)

Hej

Jeg stillede forleden dette spørgsmål: http://www.eksperten.dk/spm/865170

For at resumere har jeg følgende to tabeller:

Tabel 1: orders_action (oa):
id, order_id, action_id

Tabel 2: orders (o):
id, payment_name, payment_address etc.

Tabel 1 indeholder en række status oplysninger om ordren i tabel 2.

Jeg skal således bruge en sql sætning der viser alle de ordre, hvor fx action_id = 14 IKKE indgår.

Jeg fik et godt svar af arne_v, og det er som følger:

SELECT * FROM orders WHERE id NOT IN (SELECT order_id FROM orders_actions WHERE action_id=14)

Jeg skal dog have bygget lidt videre på denne sætning, da jeg har behov for at de resultater der skal fremkomme SKAL indeholde action_id 4.

Umiddelbart har jeg prøve at lave følgende sætning:

SELECT * FROM orders o LEFT JOIN orders_actions oa ON oa.order_id = o.id WHERE ((oa.action_id = 4) AND (o.id NOT IN (SELECT order_id FROM orders_actions WHERE action_id=14)) GROUP BY o.id;

Men så er det som om at SUB selecten bliver sat ud af spil... I hvertfald så viser den resultater uanset om 14 indgår eller ej.

Nogle idéer?!?
Avatar billede coderdk Praktikant
25. februar 2009 - 04:35 #1
Prøv:

SELECT * FROM orders WHERE id NOT IN (SELECT a.order_id FROM orders_actions a INNER JOIN orders_actions b ON a.order_id = b.order_id WHERE a.action_id=14 AND b.action_id = 4)

Det kan dog godt være, at der kommer to af hver ud ;P
Avatar billede coderdk Praktikant
25. februar 2009 - 04:37 #2
Erh læste vist forkert, prøv:

SELECT o.* FROM orders o INNER JOIN orders_actions oa ON o.order_id = oa.order_id AND oa.order_id = 4 WHERE id NOT IN (SELECT order_id FROM orders_actions WHERE action_id=14)
Avatar billede Slettet bruger
25. februar 2009 - 23:06 #3
Synes ikke rigtig at jeg kan få det til at virke. Dit svar #2 giver ingen resultater :s
Avatar billede Slettet bruger
25. februar 2009 - 23:09 #4
Har i øvrigt rettet den til

SELECT oa.*, o.* FROM orders o INNER JOIN orders_actions oa ON o.id = oa.order_id AND oa.action_id = 4 WHERE o.id NOT IN (SELECT order_id FROM orders_actions WHERE action_id=14)

Resultatet er, at der stadig vises resultater uanset om action_id = 14 indgår eller ej
Avatar billede Slettet bruger
25. februar 2009 - 23:17 #5
Min fejl... Det virker sgu... Lav et svar :)
Avatar billede coderdk Praktikant
25. februar 2009 - 23:17 #6
Ok :)
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