[T-SQL] join met 'between' / 'and' constructie en wildcards

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste,

IK wil graag twee tabellen joinen met een reeks op basis van :

INNER JOIN tblA ON TblB.fieldX BETWEEN tblA.fieldX AND tblA.fieldY

tblA.fieldX (van) of tblA.fieldY (tot) kan mogelijk speciale wildcard characters bevatten, zoals %. Bij het draaien van mijn query valt echter op dat hier geen rekening mee wordt gehouden. Ik heb begrepen dat wildcard characters niet in de BETWEEN-AND constructie kunnen worden gebruikt. Mijn vraag is echter, hoe ik toch deze ontbrekende resultaten (dus de velden met wildcard characters) kan meenemen in mijn resultaatset?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

"Wildcardkarakters" kunnen alleen in strings/varchars staan. In een string neem je dus het letterlijke karakter % op, niet een wildcard. Waarom zou je between willen gebruiken op een string? Wat jij wil kan dan ook niet is niet erg netjes. :)

Bovendien: wat zou het überhaupt betekenen? Hoe moet het systeem bepalen of iets binnen een bepaalde wildcard valt? Ik zou eens heel kritisch naar mijn datamodel gaan kijken als ik jou was. ;)

[ Voor 10% gewijzigd door NMe op 05-04-2011 14:50 ]

'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.


Acties:
  • 0 Henk 'm!

  • Danfoss
  • Registratie: Mei 2000
  • Laatst online: 19:25

Danfoss

Deze ruimte is te koop..

Inner join tbla on ((tblb.fieldx between tbla.fieldx and tbla.fieldy) or (tblb.fieldx like tbla.fieldx))

Een wildcard char in een database veld is <> een wildcard in een filter. Dus ja je kan een like in je join gebruken, maar werken zal het niet op de manier zoals jij het zou willen.

Heb ik nog een vraagje: wat probeer je eigenlijk te doen als je wilt joinen met wildcards?
Ik kan me business cases voorstellen waar je dat in een filter doet maar in een join?

Sys Specs


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat om het toewijzen van autorisaties, waarbij de autorisaties in de ene tabel in een veld zijn gedefineerd en de toewijzing in een andere tabel op basis van een 'VAN' en een 'TOT' veld, waarbij de gehele range wordt meegenomen. Dus als er bijvoorbeeld staat

Gebruiker VAN TOT
Kees A1 C3
Jan % %
Henk B2 %

En in de andere tabel

Functie Autorisatie
Muteren tabel B1

Moet deze voor zowel gebruiker Kees en Jan, maar niet voor Henk worden meegenomen

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik zou me als ik jou was even inlezen in wat standaard autorisatiemethodes, want dit is verre van optimaal. Niet in de laatste plaats omdat zo'n between niet altijd even lekker performeert en een like al helemaal niet.

Ik zou, afhankelijk van hoe complex je het hebben wil, eens kijken naar een incrementeel beveiligingssysteem, een token-based systeem of zelfs ACL's.

'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.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is geen autorisatiemechanisme wat ik wil implementeren, de data is een gegeven. Dit is een van het ERP autorisatiemechanisme van een van de grootste ERP leveranciers :) Dat is ook niet mijn vraag (zie originele topicstart)

Acties:
  • 0 Henk 'm!

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 11-09 16:00

Skinny

DIRECT!

Als ik even uitga van alleen de wildcard die je noemt (%), en dat de datastructuur een vaststaand iets is (aarghh), dan zou je iets als het volgende kunnen gebruiken :

SQL:
1
2
3
4
5
6
7
8
SELECT Gebruiker,Functie 
FROM Gebruikers G, Rechten R 
WHERE 
(
    ( Authorisatie LIKE VAN OR VAN <= Authorisatie ) -- Check VAN rechten
    AND
    ( Authorisatie LIKE TOT OR TOT <= Authorisatie ) -- Check TOT rechten
)



Voor beide kolommen (VAN, TOT) wordt gecontroleerd of deze voldoet aan een LIKE statement (B2 LIKE B%), of dat deze tekstueel kleiner is dan de te controleren Authorisatie (A2 < B1). Indien beide voldoen, dan heb je toegang.

p.s. Altijd leuk van dat soort bronsystemen :-)

[ Voor 3% gewijzigd door Skinny op 06-04-2011 21:35 ]

SIZE does matter.
"You're go at throttle up!"

Pagina: 1