[SQL] Precies het tegenovergestelde weergeven

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

  • Cai
  • Registratie: December 2001
  • Laatst online: 09:43
Sinds kort zit ik hier op een stage en daar is een Access DB, volledig verkeerd ingesteld, resultaat corrupt.

Ben het nu aan het instellen, maar krijg het juiste SQL statement niet voor elkaar.

probleem:
een product is lid van een productgroep, nu bestaan er dus producten die lid zijn van een groep terwijl die groep niet bestaat in de productgroepen tabel(er werd geen referentiele integriteit afgedwongen).

Als ik nu het volgende statement er op loslaat:
code:
1
2
SELECT Producten1.ArtikelNummer, subgroep.sgnaam
FROM Producten1 INNER JOIN subgroep ON (Producten1.ProductTypeNaam = subgroep.sgnaam);


krijg ik 270 records, terwijl er in de producten tabel zich 300 records bevinden.
Conclusie: er zijn 30 records die geen refererende record hebben in de productgroep tabel. Hoe krijg ik juist die 30 eruit?

geprobeerd heb ik: Not(Producten1.ProductTypeNaam = subgroep.sgnaam)
maar dan krijg ik zo'n 2000 records logisch, want per product worden er zo'n 28 productgroepen gevonden, waartoe deze niet behoord

Verwijderd

geen inner join gebruiken.. Want dan moet de relatie voorkomen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT streetname ,
               o.Id,
               IsNull([of].foto_filename,'nodetail.gif') as foto_fileName , 
               isNull([of].foto_filename,'') as foto_fileName2,
               IsNull(o.foto360,'') as foto360,
               o.streetNumber, 
               o.PostalCode ,
               o.City ,
               o.Surface,
               o.TotalSurface,
               o.Volume,
               IsNull(o.description,'') as description,
               pt.description as PriceType,
               op.Type as TypeDescription,
               isNull(o.buildYear,'onbekend') as buildYear,
               [or].Ammount as Rooms
FROM tbObjects o WITH ( nolock )
LEFT JOIN tbObjectFotos [of] WITH (nolock) on [of].objectId = o.id and [of].foto_typeId = 2
INNER JOIN tbPriceTypes pt WITH (nolock) on pt.id = o.PriceTypeId
INNER JOIN tbObjectTypes op WITH (nolock) on op.id = o.TypeId
INNER JOIN tbObjectRooms [or] WITH(nolock) on [or].id = o.RoomId
WHERE o.Id = @p_intId


hier heeft een "object" ook niet altijd een foto

[ Voor 90% gewijzigd door Verwijderd op 11-09-2003 10:32 ]


  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06-2025
LEFT JOIN ipv INNER JOIN

En hoe krijg je juist die 30 records eruit die geen referentie hebben:
extra WHERE clause:

WHERE subgroep.sgnaam IS NULL

Totaal:
SQL:
1
2
3
4
SELECT Producten1.ArtikelNummer, subgroep.sgnaam
FROM Producten1
LEFT JOIN subgroep ON Producten1.ProductTypeNaam=subgroep.sgnaam
WHERE subgroep.sgnaam IS NULL;

[ Voor 113% gewijzigd door Theguide op 11-09-2003 10:38 ]

Fuck me if I'm wrong, but isn't your name Gretchen?


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

En aangezien het een eenmalige query is, mag je hem best ranzig gebruiken, imho...

SQL:
1
Select * FROM Producten1 WHERE NOT ProductTypeNaam IN (Select sgnaam FROM subgroep)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Cai
  • Registratie: December 2001
  • Laatst online: 09:43
kusje @ Gorgi, sank joe

[ Voor 84% gewijzigd door Cai op 11-09-2003 10:33 ]