[SQL]Dubbele inner join + LIKE NOT werkt niet

Pagina: 1
Acties:
  • 531 views sinds 30-01-2008
  • Reageer

  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
Ik heb een SQL statement die niet werkt met een NOT LIKE maar wel met een LIKE, dus hij laat met een LIKE wel alle orders zien met een product waarin het woord: "Philips" voorkomt, maar het werkt niet als ik daar een NOT LIKE van maak en hij alle orders die producten hebben met het woord "Philips" juist weg moet laten.

SQL statement:
code:
1
SELECT * FROM order INNER JOIN order_order_product ON order.order_id = order_order_product.order_id INNER JOIN order_product ON order_product.order_product_id = order_order_product.order_product_id WHERE order_product.order_product_name NOT LIKE '%philips%' AND order.order_status = 2

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Wat doet ie wèl als je die query gebruikt?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
Orders met producten terug geven met het woord Philips erin.

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 04-01 15:49

JHS

Splitting the thaum.

Het indenten en highlighten van je code schept vaak al inzicht, en maakt het voor ons iniedergeval een stuk leesbaarder ;) :

SQL:
1
2
3
4
5
6
7
8
9
SELECT * FROM order
  INNER JOIN order_order_product 
    ON order.order_id = order_order_product.order_id 
  INNER JOIN order_product 
    ON order_product.order_product_id = order_order_product.order_product_id
  WHERE 
    order_product.order_product_name NOT LIKE '%philips%' 
   AND 
    order.order_status = 2


Verder: Krijg je foutmeldingen? Wat krijg je wel terug :) ? [/laat]

DM!


  • CXNeXo
  • Registratie: December 2000
  • Laatst online: 00:31

CXNeXo

This behavior is by design.

Misschien een hele domme opmerking, maar moet je niet de % weglaten?
Dus: NOT LIKE 'philips'

MCSE on Windows 2003 & VMware Certified Professional


  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
Ok, bedankt. Doe ik de volgende keer. Ik vind het nog steeds raar dat de LIKE wel werkt en de NOT LIKE niet.

Nou niet echt, want dan krijg ik helemaal niets terug.

[ Voor 22% gewijzigd door Tha_Spike_1981 op 16-05-2006 16:55 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Krijg je alleen records met 'philips' erin terug? Of ook andere? En krijg je alle records met 'philips' erin terug? Of zijn er ook een paar die niet in je resultset belanden?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • CXNeXo
  • Registratie: December 2000
  • Laatst online: 00:31

CXNeXo

This behavior is by design.

Kan het misschien zo zijn dat er geen records zijn waar philips in staan MET order status 2?
Probeer eens de AND order.order_status = 2 weg te laten...

MCSE on Windows 2003 & VMware Certified Professional


  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
Nee, ik krijg alle records met 'philips' terug en er blijven er ook geen achter. Ook als ik de order status weg laat.

[ Voor 25% gewijzigd door Tha_Spike_1981 op 16-05-2006 17:07 ]


  • coenbijlsma
  • Registratie: Augustus 2004
  • Niet online
Probeer eens

SQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT * FROM order
INNER JOIN order_order_product 
ON order.order_id = order_order_product.order_id 
INNER JOIN order_product 
ON order_product.order_product_id = order_order_product.order_product_id
WHERE 
order_product.order_product_name NOT IN(SELECT order_product_name
                              FROM order_product
                              WHERE order_product_name LIKE '%philips%') 
AND 
order.order_status = 2


misschien werkt dat wel..

  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
Nope helaas ook niet. Niemand suggesties?

Verwijderd

is dit nog een idee?

code:
1
WHERE  NOT  order_product.order_product_name LIKE '%philips%'

  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
Verwijderd schreef op woensdag 17 mei 2006 @ 11:36:
is dit nog een idee?

code:
1
WHERE  NOT  order_product.order_product_name LIKE '%philips%'
Ik dacht eerst goed idee, maar helaas werkt dat ook niet. Hij is wel goed 'stuk' want als ik een WHERE NOT gebruik met een NOT LIKE dan werkt het wel weer. Dus dan vind hij alles met Philips, maar zonder NOT LIKE dus LIKE vind hij helemaal niets, terwijl dat wel het geval is, dat weet ik zeker.

  • Retonator
  • Registratie: Februari 2002
  • Laatst online: 05-08-2025
Waarom gebruik je niet ipv. LIKE REGEXP en dan een regex die alles terug geeft behalve dingen waar philips invoor komen

k heb even geen tijd om de regex op te zoeken

  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
Ook al geprobeerd werkt ook niet... Zijn er misschien totaal andere oplossingen?

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 14-12-2025

jAnO!

lalalavanillevla

Tha_Spike_1981 schreef op woensdag 17 mei 2006 @ 12:09:
terwijl dat wel het geval is, dat weet ik zeker.
Hoe vaak ik wel niet niet op mijn bek ben gegaan met die....

Ik zou je testset nog maar eens doorlopen...

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21-02 03:42
[..] het werkt niet als ik daar een NOT LIKE van maak en hij alle orders die producten hebben met het woord "Philips" juist weg moet laten.
Bedoel je nu dat je denkt dat jouw query alle rijen moet weglaten met een order die een Philips product bevat? Dat is namelijk niet wat er staat. Met andere woorden, als je deze tabellen hebt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
order
-----
1
1

order_order_product
--------------------
1, 1
1, 2

order_product
--------------
1, foo
2, Philips

Wat verwacht je dan terug te krijgen?

Als je een enkele rij (met order 1, product 1) terug krijgt, werkt de query precies zoals zou moeten, maar dat is misschien niet wat je bedoelt.

(Tenslotte kun je MySQL geloof ik ook nog configureren om case sensitive te matchen. Verifieer dat dat niet het geval is.)

[ Voor 16% gewijzigd door Soultaker op 17-05-2006 18:15 ]


  • Tha_Spike_1981
  • Registratie: April 2003
  • Laatst online: 20-02 11:05
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
order
-----
1
2
3

order_order_product
--------------------
1, 1
1, 2
2, 1
3, 1
3, 2
3, 3


order_product
--------------
1, foo
2, Philips
3, Sony
4, Samsung


Heb de DB een beetje uitgebreid, en ik verwacht dat hij alle order weglaat die een product hebben waar Philips in komt. Dus in dit geval wil ik alleen maar Order 2 zien. Je zegt dat hij dat op dit moment niet doet, kun je me een schop in de goede richting geven?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dit misschien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT *
FROM order o
INNER JOIN order_order_product oop ON order.order_id = order_order_product.order_id
INNER JOIN order_product op ON order_product.order_product_id = order_order_product.order_product_id
WHERE NOT EXISTS (
  SELECT 'X'
  FROM order_order_product oop2
  INNER JOIN order_product op2 ON op2.order_product_id = oop2.order_product_id
  WHERE op2.order_product_name NOT LIKE '%philips%' 
  AND oop2.order_id = o.order_id
)
AND o.order_status = 2


Ongetest en vereist wel subqueries dus MySQL 4.1+
Pagina: 1