webForumDet fria alternativet

Två JOIN?

6 svar · 229 visningar · startad av Swey

SweyMedlem sedan apr. 20003 971 inlägg
#1

Det var ett tag sen jag höll på med SQL. Vad är det för fel här?

SELECT Customers.Name, Products.Product, Orders.Delievered
FROM Orders
INNER JOIN Customers
ON Orders.Customer = Customers.ID
INNER JOIN Products
ON Orders.Product = Products.ID

Orders är alltså en tabell med kunder och produkter i form av nummer. Kundernas och produkternas namn finns i två andra tabeller.

Detta fungerar dock inte. En INNER JOIN fungerar men inte två efter varandra.

------------------
- Swey
A hacker from the south

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Vad är problemet? Blir det något felmeddelande? Det är i alla fall inget syntaktiskt fel i koden.

Vilken DBMS använder du? Access/JET har några (icke standardmässiga) restriktioner hur man får skriva om man har flera join. Det kan behövas lite extra parenteser för att det skall godkännas av JET

SELECT Customers.Name, Products.Product, Orders.Delievered
  FROM ( Orders INNER JOIN Customers ON Orders.Customer = Customers.ID )
              INNER JOIN Products ON Orders.Product = Products.ID

tex.

------------------
essentitia preter non sans multiplicandum

SweyMedlem sedan apr. 20003 971 inlägg
#3

Tack, för svaret.
Ja, det blir ett felmeddelande på FROM-satsen, och jag använder Access.

Det fungerade! Men det verkar jobbigt att man måste skriva parenteser. Hur gör man det med tre JOINs?

Varje kund kommer från ett land lagrad i en fjärde tabell.

SELECT Customers.Name, Countries.Country Products.Product, Delievered
FROM Orders
INNER JOIN Customers
ON Orders.Customer = Customers.ID
INNER JOIN Products
ON Orders.Product = Products.ID
INNER JOIN Countries
ON Customers.Country = Countries.ID

Om jag får detta löst, förstår jag nog hur jag gör med fyra JOINs också. :)

------------------
- Swey
A hacker from the south

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Det är väl samma metodik där

SELECT Customers.Name, Countries.Country Products.Product, Delievered
FROM ((Orders
INNER JOIN Customers
ON Orders.Customer = Customers.ID)
INNER JOIN Products
ON Orders.Product = Products.ID)
INNER JOIN Countries
ON Customers.Country = Countries.ID

red: rättning av parentesfel
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 25 sep 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Så länge det gäller inner join så kan man ju skriva

SELECT Customers.Name, Countries.Country Products.Product, Delievered
FROM Orders,Customers,
Products,Countries
where Orders.Customer = Customers.ID
and Orders.Product = Products.ID
and Customers.Country = Countries.ID

så slipper man parenteser

------------------
essentitia preter non sans multiplicandum

SweyMedlem sedan apr. 20003 971 inlägg
#6

"Så länge det gäller inner join så kan man ju skriva"
Jo, så kan man ju skriva. Men jag gör det här för att lära mig just INNER, LEFT och RIGHT JOIN, så jag vill inte skriva så. :)

"Det är väl samma metodik där"
Tack, fast (( skulle väl vara före Orders och inte efter?

------------------
- Swey
A hacker from the south

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Tack, fast (( skulle väl vara före Orders och inte efter?

Jo visst skall dom vara innan orders

------------------
essentitia preter non sans multiplicandum

136 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)