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

[SQL] JOINing perikelen - join on meer dan een column

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik ben op zoek naar een SQL query om een JOIN te plegen tussen twee tables, zodat ik uit kan vogelen welke types er missen. De voorbeelden die ik kan vinden voor een JOIN gebruiken allemaal een column, en ik ben afhankelijk van twee. (Combinatie Naam en Directory - zowel Naam als Directory komen vele malen voor)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Table Artwork:
ID | ArtistID | Naam   | Directory | Filenaam
01   1000       Millie   001         0001.jpg
02   1001       Fred     001         0001.jpg
03   1001       Fred     002         0003.jpg
04   1003       Jan      005         0004.jpg
05   1003       Fred     003         0002.jpg


Table Arttype:
ID | Naam    | Directory | Type       | Extension
01   Millie    001         Screenshot
02   Fred      002         Screenshot
03   Jan       005         Artwork
04   Fred      009         Artwork      12


Wat ik probeer uit te vinden is of ik Arttypes niet heb, en of ik Arttypes wel heb die niet gebruikt worden. De combinatie Naam en Directory is de 'key' om in Arttype op te zoeken wat voor type we mee te maken hebben.

'Millie'/'001' uit Artwork geeft 'Screenshot' uit Arttype. 'Fred'/'001' uit Artwork geeft geen resultaat in Arttype (Combinatie komt niet voor). 'Fred'/'009' uit Arttype is niet gebruikt in Artwork.

Kan iemand suggesties/hints geven hoe ik dit het makkelijkste aan kan pakken?

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Ook in een JOIN kan je gewoon AND gebruiken:
SQL:
1
JOIN ArtWork ON ArtWork.Naam = Arttype.Naam AND ArtWork.Directory = Arttype.Directory

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Daarnaast: als je een ID hebt in Artwork, waarom gebruik je die dan niet :?

Met andere woorden, waarom staan naam en directory in Arttype, waar je afkunt met 1 kolom Artwork_ID :?

Wat betekent mijn avatar?


Verwijderd

Topicstarter
Ik had me niet gerealiseerd dat JOIN ook AND lustte. Ooops momentje. :)

SQL:
1
2
3
SELECT artwork.ID AS ID,  arttype.type AS Ttype
FROM artwork LEFT OUTER JOIN arttype ON artwork.charname = arttype.charname AND rtwork.dir = arttype.dir
ORDER BY Ttype


Gebruikt om de loszwevende artwork types te traceren en corrigeren.

De reden dat ik Artwork_ID niet direct aan Arttype kan koppelen is dat meerdere Artwork_IDs naar eenzelfde Arttype (kunnen) verwijzen. Het zal niet vaak gebeuren dat een enkele ArtworkID aan een ArttypeID gekoppeld is.

Misschien is het hiermee iets duidelijker:
code:
1
2
3
4
5
6
7
8
9
    ArtistID
        ArtworkID (Onderwerp / Directory / Filename)
        ArtworkID
        ArtworkID
        ArtworkID
        ArtworkID

    ArttypeID
        Onderwerp / Directory / Arttype / Extension


Een artiest (artistID) kan meer dan een bestand (ArtworkID) aan zich hebben hangen (meer regel dan uitzondering).

Die bestanden staan op de webserver gesorteerd op onderwerp/subdir/ArtworkFile.jpg. Maximaal 60 bestanden per subdir. Elk onderwerp is onderverdeeld in artworktypes, zoals Screenshots, FanArt, LineArt, Animations, etc.

Omdat er 60 bestanden in een subdir gaan, raken ze vol. Er word een tweede subdir gemaakt, van hetzelfde artworktype als de vorige, en deze krijgt in het arttype table de extensie '2' mee. Dus Screenshots en Screenshots 2 (etc).

Voor de searchengine is het van belang dat er gechecked kan worden tot welke type een bestand behoord, en waar deze terug te vinden is op de site. Vandaar dat Fred/001 teruggeleid kan worden tot Screenshots, en Fred/002 bijvoorbeeld OOK Screenshots kan zijn, maar dan Screenshots 2.

Het loopt allemaal prima. Ik ben met een schoonmaak bezig, na 11 jaar online zijn er exact 9 bestanden die niet voorzien zijn van een arttype. Dat is op 65,000 bestanden niet echt slecht.

Bedankt voor de hulp!