Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySql] Combinaties van velden uitsluiten

Pagina: 1
Acties:

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 13-11 10:23
Ik heb een tabel met 2 kolommen waarin getallen staan, zoiets als dit:

| 1 | 0 |
| 1 | 0 |
| 1 | 1 |
| 2 | 0 |
| 2 | 1 |

Nu wil ik alle rijen waarbij de volgende combinatie niet voorkomt:
Eerste kolom = 1 , tweede kolom = 0

Dit betekent dus dat je de laatste 3 rijen terug zou moeten krijgen.

Onderstaande query werkt iig niet, want dan kijkt hij niet naar de combinatie:
SELECT *
FROM table
WHERE column_1 != 1 AND column_2 != 0

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

verytallman schreef op woensdag 15 augustus 2007 @ 15:53:
Ik heb een tabel met 2 kolommen waarin getallen staan, zoiets als dit:

| 1 | 0 |
| 1 | 0 |
| 1 | 1 |
| 2 | 0 |
| 2 | 1 |

Nu wil ik alle rijen waarbij de volgende combinatie niet voorkomt:
Eerste rij = 1 , tweede rij = 0

Dit betekent dus dat je de laatste 3 rijen terug zou moeten krijgen.

Onderstaande query werkt iig niet, want dan kijkt hij niet naar de combinatie:
SELECT *
FROM table
WHERE column_1 != 1 AND column_2 != 0
SELECT *
FROM table
EXCEPT
SELECT *
FROM table
WHERE column_1 = 1 AND column_2 = 0

Overigens, volgens mij kun je die AND gewoon door een OR vervangen. Dus zo:

SELECT *
FROM table
WHERE column_1 != 1 OR column_2 != 0

[ Voor 9% gewijzigd door JKVA op 15-08-2007 16:00 ]

Fat Pizza's pizza, they are big and they are cheezy


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
verytallman schreef op woensdag 15 augustus 2007 @ 15:53:
Ik heb een tabel met 2 kolommen waarin getallen staan, zoiets als dit:

| 1 | 0 |
| 1 | 0 |
| 1 | 1 |
| 2 | 0 |
| 2 | 1 |

Nu wil ik alle rijen waarbij de volgende combinatie niet voorkomt:
Eerste rij = 1 , tweede rij = 0

Dit betekent dus dat je de laatste 3 rijen terug zou moeten krijgen.

Onderstaande query werkt iig niet, want dan kijkt hij niet naar de combinatie:
SELECT *
FROM table
WHERE column_1 != 1 AND column_2 != 0
subqueries, idd...

ennuh, een kolom != rij... en rij != kolom.... let daar voortaan op als je je probleem omschrijft...

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 13-11 10:23
Thx, ik bedoelde kolom idd...

Except is waarschijnlijk wat ik zocht :)

  • MeatLoaf
  • Registratie: Januari 2003
  • Laatst online: 06-04 20:06
Een subquery is ook mogelijk, of zoals hier onder.

SELECT *
FROM table
WHERE column_1 != 1 OR column_2 != 0

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 13-11 10:23
OR werkt trouwens niet, omdat het juist om een combinatie gaat.

Ik heb hem nu werkend met een subquery, thx.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:48

Janoz

Moderator Devschuur®

!litemod

Hoeft helemaal niet met een subquery. Bij het opstellen van de conditie is er een prachtige 'demorgan' fout gemaakt.

SELECT * FROM TABEL WHERE NOT (column1=1 AND column2=0)

Als je vervolgens de demorgan regel toepast, dan kom je tot de volgende query

SELECT * FROM TABEL WHERE column1!=1 OR column2!=0

----

Hmm, volgende keer niet lezen, typen, telefoon opnemen en dan submitten... Wordt het traag van..

@TS: Probeer eerst de query eens voordat je beweert dat het niet werkt ;). Een subquery hier gebruiken is iig dikke overkill en zal er, zeker in het geval van MySQL, voor zorgen dat de query een stuk minder efficient verloopt.

[ Voor 35% gewijzigd door Janoz op 15-08-2007 16:21 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Janoz schreef op woensdag 15 augustus 2007 @ 16:19:
Hoeft helemaal niet met een subquery. Bij het opstellen van de conditie is er een prachtige 'demorgan' fout gemaakt.

SELECT * FROM TABEL WHERE NOT (column1=1 AND column2=0)
Dan vind ik persoonlijk deze het duidelijkst; die zegt namelijk (als je 'm "uitspreekt") precies wat je wil: ik wil alles waar NIET (kolom A = 1 en kolom B = 0). Probeer dat maar eens met de tweede :+

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Janoz schreef op woensdag 15 augustus 2007 @ 16:19:
Hoeft helemaal niet met een subquery. Bij het opstellen van de conditie is er een prachtige 'demorgan' fout gemaakt.

SELECT * FROM TABEL WHERE NOT (column1=1 AND column2=0)

Als je vervolgens de demorgan regel toepast, dan kom je tot de volgende query

SELECT * FROM TABEL WHERE column1!=1 OR column2!=0

----

Hmm, volgende keer niet lezen, typen, telefoon opnemen en dan submitten... Wordt het traag van..

@TS: Probeer eerst de query eens voordat je beweert dat het niet werkt ;). Een subquery hier gebruiken is iig dikke overkill en zal er, zeker in het geval van MySQL, voor zorgen dat de query een stuk minder efficient verloopt.
Lol, DeMorgan. Lang geleden dat ik die term gehoord heb. Maar je hebt wel gelijk. Dat was namelijk ook de manier hoe ik mijn oplossing bedacht had.

Fat Pizza's pizza, they are big and they are cheezy


  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 13-11 10:23
De regel klopt wel idd, thx

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Janoz schreef op woensdag 15 augustus 2007 @ 16:19:
SELECT * FROM TABEL WHERE NOT (column1=1 AND column2=0)
Of je kan natuurlijk gewoon een row-constructor gebruiken...
code:
1
2
3
4
5
6
7
8
mysql> select * from tabel where (column_1, column_2) <> (1, 0);
+----------+----------+
| column_1 | column_2 |
+----------+----------+
|        1 |        1 |
|        2 |        0 |
|        2 |        1 |
+----------+----------+
Pagina: 1