Toon posts:

Sql - Talen in meerdere kollommen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik zit met een probleem bij mijn stage, er is me gevraagd om een query te maken die per artikel de artikelvertalingen per taal in een aparte kolom weergeeft.

De tabellen zijn Artikel (artikelcode,omschrijving etc.) en Artikelvertaling (artikelcode, taal, omschrijving)

De query die ik nu heb is de volgende:

SELECT Artikel.Artikelcode, Artikel.Omschrijving, Artikelvertaling.Omschrijving AS Duits
FROM Artikel, Artikelvertaling
WHERE Artikelvertaling.Taal = "DE" and Artikel.Artikelcode = Artikelvertaling.Artikelcode;

Probleem is dat ik nu alleen de duitse vertalingen heb, maar de bedoeling is dat de uitkomst wordt:(artikel.artikelcode, artikel.omschrijving, Duitse omschrijving, Franse omschrijving, Engelse omschrijving etc.)

kan iemand me hierbij helpen?
Alvast bedankt!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-05 08:08

Janoz

Moderator Devschuur®

!litemod

Je kunt hem toch 3x joinen met de Artikel vertaling tabel?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Ik ben niet echt thuis in het joinen van tabellen, hoe werkt zoiets dan?

  • rb338
  • Registratie: Januari 2001
  • Laatst online: 04-03 19:38
Volgens mij heb je al 1 join in je query hoor :+

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je kunt een join op twee manieren doen:

Je zet meerdere tabellen in je FROM, gescheiden door komma's en in je where statement match je die tabellen met elkaar, bijvoorbeeld op id.

Ook kun je gebruik maken van de JOIN syntax (deze verschilt nog wel eens per SQL dialect):
code:
1
2
3
SELECT teksten.id, teksten.omschrijving, vertalingen.vertalingomschrijving
FROM teksten
JOIN vertalingen ON teksten.id = vertalingen.id


Voor jouw geval kun je dit uitbreiden met:
code:
1
2
3
4
SELECT teksten.id, teksten.omschrijving, v1.vertalingomschrijving as oms_duits, v2.vertalingenomschrijving as oms_frans
FROM teksten
JOIN vertalingen v1 ON teksten.id = v2.id AND vertalingen.taal = 'de'
JOIN vertalingen v2 ON teksten.id = v2.id AND vertalingen.taal = 'fr'


En mocht het voorkomen dat vertalingen niet voorkomen voor een bepaalde taal, dan moet je mogelijk van een LEFT (OUTER) JOIN gebruik gaan maken, omdat je anders geen record terug krijgt voor een bepaalde tekst. Kijk anders eens op http://www.w3schools.com/sql/default.asp

[ Voor 7% gewijzigd door bigbeng op 18-03-2005 11:28 ]


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 10-05 15:56
Kan wel zijn, maar toch "rammelt" het datamodel. Nederlands is ook gewoon een taal, dus ik zou dit er van maken:

Artikel( Code, etc ) -> Taal-onafhankelijke gegevens
ArtikelOmschrijvingen( ArtikelCode, Taal, omschrijving ) -> taal afhankelijke gegevens

Zo heb ik ook een keer een website opgezet die alleen NL en EN was, maar wel meerder talen moest gaan kunnen ondersteunen.

Edit: Je queries zijn dan ook een stuk eenvoudiger:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    Artikel.Code,
    Atikel.xxxx,
    ArtikelOmschrijvingen.Omschrijving,
    ArtikelOmschrijvingen.xxxx
FROM
    Artikel
INNER JOIN
    ArtikelOmschrijvingen
ON
    Artikel.Code = ArtikelOmschrijvingen.ArtikelCode
WHERE
    ArtikelOmschrijvingen.taal = "NL"

[ Voor 36% gewijzigd door sig69 op 18-03-2005 11:34 ]

Roomba E5 te koop


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Het model rammelt, omdat je voor elke nieuwe taal een nieuwe kolom krijgt. Dat moet je al niet willen. Terug naar opdrachtgever dus.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

De extra kolom krijg je alleen bij de presentatie. In het model kun je zoveel talen opslaan als je wilt. Niets mis mee dus.
Een join specifiek maken op alle nu beschikbare talen is wel lelijk natuurlijk.
Ik zou alle vertalingen per artikel opvragen, en de presentatie over laten aan de taal waarmee dat wordt gedaan (PHP? java/jsp? asp?) .

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Verwijderd

Topicstarter
De bedoeling is dat de uitkomst van deze query in excel ingelezen wordt. De query zelf moet dus de presentatie regelen.

@bigbeng: Wat bedoel je precies met v1 en v2 in je voorbeeld?
@bartware: Een join maken specifiek op de nu beschikbare talen is wel de bedoeling, als er later een taal bij komt kan de query altijd aangepast worden.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
v1 en v2 zijn aliasen die ik definieer in de FROM en JOIN onderdelen van de query. Je hebt blijkbaar nog niet zo heel veel ervaring met SQL, dus raad ik je aan om op http://www.w3schools.com/sql eens rustig door de tutorial te bladeren. Er zal je dan een stuk meer duidelijk worden.
Pagina: 1