Avatar billede Slettet bruger
29. maj 2002 - 13:39 Der er 11 kommentarer og
1 løsning

Mange til mange relation

Hvordan skal en SQL sætning se ud til en mange til mange relation?

Jeg har 3 tabeller

Suppliers
-SupplierID
-Catalog

Catalogs
-CatalogID
-Name

Suppliers_Catalogs
-CatalogID
-SupplierID

Hvordan henter jeg hvis jeg har en post i catalog og skal finde den første relateret Supplier til det pågældende katalog.

Suppliers_Catalogs bruger til at lave en mange til mange relation og Suppliers.Catalog relatere til Suppliers_Catalogs.SupplierID og Suppliers_Catalogs.CatalogID til Catalogs.CatalogID

Det skal bruges så jeg kan loope alle kataloger igennem og finde en af de suppliers som den relatere til.

Håber det er forklaret ordentligt ellers sig til.
Avatar billede a1a1 Novice
29. maj 2002 - 13:44 #1
2 sek
Avatar billede a1a1 Novice
29. maj 2002 - 13:48 #2
SELECT c.catalogID, c.Name FROM (Catalogs
LEFT JOIN suppliers_catalogs sc ON c.catalogID=sc.catalogID)
LEFT JOIN suppliers s ON sc.supplierID=s.supplierID)
WHERE c.catalogID = 1

hvis det nu var catalogs.catalogID nr 1 du er ude efter.

:)
Avatar billede a1a1 Novice
29. maj 2002 - 13:49 #3
ups mangle en (

SELECT c.catalogID, c.Name FROM ((Catalogs
LEFT JOIN suppliers_catalogs sc ON c.catalogID=sc.catalogID)
LEFT JOIN suppliers s ON sc.supplierID=s.supplierID)
WHERE c.catalogID = 1
Avatar billede Slettet bruger
29. maj 2002 - 15:47 #4
Nej hvor dejligt - det virker...

Kan du ikke lige forklare hvordan det med de forkortelser du laver med sc, s,c - altså hvordan de skal defineres i en SQl så den bruger det som en forkortelse.

Jeg plejer at bruge * for alle felter, er det bedre at skrive dem og hvorfor?

a1 jeg smider lige de point til dig senere, så håber jeg du har kommenteret min ekstra spørgsmål.
Avatar billede Slettet bruger
29. maj 2002 - 16:00 #5
Mangler lige lidt på den SQL streng som jeg glemte at nævne.

Det skal sorteres efter Suppliers.Category feltet og så skal den ikke vise nogle kataloger flere gange kun én gang.
Avatar billede a1a1 Novice
29. maj 2002 - 16:16 #6
du skal ikke bruge * da det tager alle felter med (der kommer også en fejl da du jo så har flere felter der hedder catalogID (catalogs og suppliers_catalog))

en anden grund til aldrig at bruge * er at du tager alle felter, og ikke kun den du vil / skal bruge (forestil dig hvis du senere puttede 2 notatfelter fyldt med tekst i, det vil tage længere tid at "hente" da du jo henter det hele (og ikke kun det du skal bruge) ))

Forkotelser.... det er standard SQL at gøre det sådan
du kan også sagtens gøre det sådan her
SELECT Catalogs.catalogID, Catalogs.Name FROM ((Catalogs
LEFT JOIN suppliers_catalogs ON Catalogs.catalogID=suppliers_catalogs.catalogID)
LEFT JOIN suppliers ON suppliers_catalogs.supplierID=suppliers .supplierID)
WHERE Catalogs.catalogID = 1

du kan også
select c.* FROM catalogs c (vælger alle fra catalogs)
eller
select catalogs.* FROM catalogs (vælger alle fra catalogs)

du sortere med ORDER BY supliers.category (hvor har du supliers.category fra? )

for kun at vise et katalog, prøv med
SELECT DISTINCT c.catalogID, c.Name FROM ........OSV...:)

:)
Avatar billede Slettet bruger
29. maj 2002 - 21:11 #7
Jeg kunne ikke huske alle felter da jeg skrev spørgsmålet, da jeg var i skole.

Hvis jeg sætter din sorterings kode ind. bliver min SQL sådan her (har ændret noget da lidt flere felter skulle vises og sådan):

SELECT c.catalogID, s.SupplierID, s.Shorttext, s.Category, s.logo, s.Company FROM ((Catalogs c LEFT JOIN suppliers_catalogs sc ON c.catalogID=sc.catalogID) LEFT JOIN suppliers s ON sc.supplierID=s.supplierID ORDER BY supliers.category)

Fejl beskeden er: Der er en syntaksfejl i JOIN-handlingen.

øh var det ikke der den skulle ind.
Avatar billede a1a1 Novice
29. maj 2002 - 21:18 #8
:)

SELECT c.catalogID, s.SupplierID, s.Shorttext, s.Category, s.logo, s.Company FROM ((Catalogs c LEFT JOIN suppliers_catalogs sc ON c.catalogID=sc.catalogID) LEFT JOIN suppliers s ON sc.supplierID=s.supplierID)
ORDER BY supliers.category

sånnn :)
Avatar billede Slettet bruger
29. maj 2002 - 21:24 #9
Niks den kommer med følgende fejl...

Der er ikke angivet nogen værdi for en eller flere krævede parametre.

For lidt ekstra hjælp så viser jeg lige hvordan de to tabeller er bygget op som ikke var helt korrekt i starten.

Suppliers
-Catalog (rel til flette tabel)
-SupplierID
-Company
-Category
-ShortText
-Logo
-Description

Catalogs
-CatalogID (rel til flette tabel)
-Picture
-Description
-NewCatalog (yes/no)
Avatar billede a1a1 Novice
29. maj 2002 - 21:34 #10
stave fejl...
ORDER BY supliers.category
skal jo være
ORDER BY s.category
Avatar billede Slettet bruger
29. maj 2002 - 21:37 #11
det er dog samme fejl. Hm det begynder at blive irreterende det her...
Avatar billede Slettet bruger
30. maj 2002 - 15:47 #12
Andre der kunne hjælpe til en løsning?
en mange-til-mange relation hvor den er sorteret efter en Suppliers.Category se mere info længere oppe...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester