Avatar billede steen_hansen Forsker
26. maj 2022 - 22:44 Der er 5 kommentarer og
2 løsninger

FORKORT SQL WHERE user <> 2 AND user AND user <> 16 etc.

Jeg har udskrevet en lang SQL, som ser nogenlunde sådan her ud (Jeg har med vilje lagt linieskift ind, så I kan bedre kan se og skelne mellem hvad jeg ønsker)

Set RS1200 = Conn.Execute("SELECT * FROM users WHERE
status <> 30 AND status <> 2  AND status <> 5 AND status <> 6 AND status <> 3 AND status <> 4 AND status <> 12 AND status <> 13 AND status <> 16 AND status <> 7 AND status <> 10 AND status <> 9 AND status <> 8 AND status <> 14 AND status <> 17
AND A = 1 AND status = 1 OR B = 1 ORDER BY category, initials ASC")

Jeg kan ikke huske syntaksen, men jeg mener man kan benytte IN(30,2,5,6,3 ....osv)

Og hvordan skal SQL'en se ud med A og B?
Avatar billede erikjacobsen Ekspert
26. maj 2022 - 23:57 #1
Som din SQL ser ud be'r du om rækker med status=1, og dermed kan status ikke være 30,2,5,6, ... osv. Mener du det? Giver den det rigtige resultat?

Syntaksen du leder efter er nok

... WHERE NOT status in (30,2,5....) and A=1 and status=1 OR B=1 ORDER ...
Avatar billede arne_v Ekspert
27. maj 2022 - 01:42 #2
Ja.

Jeg ville bruge NOT IN og putte nogle parenteser til at sstyre AND/OR.

... WHERE status NOT IN (30,2,5....) AND ((a=1 AND status=1) OR b=1) ORDER ...

Parenteserne er kun et gæt.
Avatar billede steen_hansen Forsker
04. juni 2022 - 14:52 #3
Takker mange gange :)
Avatar billede steen_hansen Forsker
04. juni 2022 - 15:15 #4
Det er mig, der takker Jer begge to :)
Avatar billede arne_v Ekspert
04. juni 2022 - 15:24 #5
Strengt taget var det Erik som svarede på spørgsmålet. Jeg foreslog x NOT IN () fremfor NOT x IN () fordi jeg finder det nemmere at læse - og anbefalede nogle parenteser til at styre AND og OR logikken.
Avatar billede steen_hansen Forsker
04. juni 2022 - 15:27 #6
Og jeg synes også det gjorde det mere overskueligt med parenteserne. Så det må ogsåp betragtes som et validt svar :)
Avatar billede arne_v Ekspert
05. juni 2022 - 02:39 #7
Det er ikke kune visuelt - det er set utallige gange at parentesløse udtryk har været forkerte. Fordi meget få kan huske hele operator precedence tabellen i SQL - de fleste kan huske at */ beregnes før +-, men mange kan ikke huske hvordan det er med AND og OR.

mysql> SELECT FALSE AND TRUE OR TRUE;
+------------------------+
| FALSE AND TRUE OR TRUE |
+------------------------+
|                      1 |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT (FALSE AND TRUE) OR TRUE;
+--------------------------+
| (FALSE AND TRUE) OR TRUE |
+--------------------------+
|                        1 |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT FALSE AND (TRUE OR TRUE);
+--------------------------+
| FALSE AND (TRUE OR TRUE) |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUE OR TRUE AND FALSE;
+------------------------+
| TRUE OR TRUE AND FALSE |
+------------------------+
|                      1 |
+------------------------+
1 row in set (0.00 sec)

mysql> SELECT (TRUE OR TRUE) AND FALSE;
+--------------------------+
| (TRUE OR TRUE) AND FALSE |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUE OR (TRUE AND FALSE);
+--------------------------+
| TRUE OR (TRUE AND FALSE) |
+--------------------------+
|                        1 |
+--------------------------+
1 row in set (0.00 sec)
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

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