Toon posts:

[mysql] Left join icm. Select op de 2e table

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer uit een aantal tabellen met een left-join een resultaat te halen, die ik wil filteren op een eigenschap uit de tabel die ik join. Het punt is dat ik nu ook graag resultaten wil krijgen die geen overeenkomende rijen in de 2e tabel hebben (daarom ook de left-join). Nu dacht ik, als er geen overeenkomende rij is in de 2e tabel worden de velden van die tabel NULL, dus heb ik de where conditie aangepast met 'OR tabel2.eigenschap = NULL', maar dit blijkt niet te werken.

De query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
    templates.*
FROM
    templates
INNER JOIN template_category_assoc AS category ON category.template_id = templates.id
INNER JOIN resource AS resource ON resource.identifier = templates.id
LEFT JOIN resource_scope_origin AS origin ON origin.resourceId = resource.resourceId
WHERE
    category.category_id = 5
AND
    resource.resourceTypeId =16
AND
    (origin.permissionDomainId =1 OR origin.permissionDomainId = NULL)
GROUP BY templates.id

Ik wil dus templates hebben waarvan de resource_scope_orgin.permissionDomainId voldoet aan een bepaald ID (1 in dit voorbeeld), of helemaal geen scope heeft (resource is global en beschikbaar voor alle domains)

Vast iets heel simpels dat ik over het hoofd zie, maar ik zie het niet |:(

[ Voor 3% gewijzigd door Verwijderd op 15-01-2009 22:01 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
SELECT NULL = NULL , NULL IS NULL ;
> Null, 1

Dus IS NULL voor vergelijkingen met null. :)

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voutloos schreef op donderdag 15 januari 2009 @ 22:02:
SELECT NULL = NULL , NULL IS NULL ;
> Null, 1

Dus IS NULL voor vergelijkingen met null. :)
Argh! Natuurlijk! stom stom STOM |:(

Bedankt!

Acties:
  • 0 Henk 'm!

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 23-09 22:37
Waarom niet gewoon zo?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
    templates.*
FROM
    templates
INNER JOIN template_category_assoc AS category ON category.template_id = templates.id
INNER JOIN resource AS resource ON resource.identifier = templates.id
LEFT JOIN resource_scope_origin AS origin ON origin.resourceId = resource.resourceId 
     AND origin.permissionDomainID = 1
WHERE
    category.category_id = 5
AND
    resource.resourceTypeId =16
GROUP BY templates.id

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Kan ook, en in een aantal gevallen is dat bij mysql nog een gruwelijke optimalisatie ook. :+

Maar dan nog kan het geen kwaad om het verschil tussen = NULL en IS NULL er in te wrijven. >:)

{signature}


Acties:
  • 0 Henk 'm!

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 23-09 22:37
Voutloos schreef op donderdag 15 januari 2009 @ 22:10:
Kan ook, en in een aantal gevallen is dat bij mysql nog een gruwelijke optimalisatie ook. :+
En je hebt ook geen kans dat je de haakjes rondom de OR vergeet, wat weer een heel ander resultaat heeft :)
Pagina: 1