Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:10 Der er 36 kommentarer og
2 løsninger

SQL - Inner Join

Jeg har problemer med at lave INNER JOIN på to tabeller.

Mine tabeller ser sådan her ud:

tblSupport
----------
fldID - Integer
fldLanguage - Integer
fldCategory - Integer
fldData - Text

tblLanguage
-----------
fldID - Integer
fldName - Text

tblCategory
-----------
fldID - Integer
fldName - Text

Jeg vil så gerne lave have fldName fra tabellerne tblLanguage og tblCategory ind i den sql-sætning jeg hiver alle data ud fra tblSupport.

Har prøvet med denne men det går ikke så godt :(

SELECT [tblSupport].*, [tblLanguage.fldName] AS [fldLanguageName], [tblSupportCategory.fldName] AS [fldCategoryName]

FROM [tblSupport]

INNER JOIN [tblLanguage] ON [tblSupport].[fldLanguage]=[tblLanguage].[fldID])

INNER JOIN [tblSupportCategory] ON [tblSupport].[fldCategory]=[tblSupportCategory].[fldID]

ORDER BY [tblSupport.fldID], [tblSupport.fldLanguage];

Nogle idéer ?
Avatar billede terry Ekspert
24. maj 2003 - 14:16 #1
to tabeller.
I see three!

Torben. The easiest way is to make a view in Enetrprise manager. This way its all done visually
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:20 #2
Terry >> Jeg har ikke Enterprise Manager ... har ingen SQL server herhjemme ...
Avatar billede terry Ekspert
24. maj 2003 - 14:20 #3
Oops , thought we were talking SQL Server, back in five!
Avatar billede htm Nybegynder
24. maj 2003 - 14:20 #4
SELECT * FROM tblSupport
INNER JOIN tblLanguage ON tblSupport.fldID = tblLanguage.fldID
INNER JOIN tblCategory ON tblSupport.fldID = tblCategory.fldID
ORDER BY tblSupport.fldID
Avatar billede terry Ekspert
24. maj 2003 - 14:21 #5
What about Access?
Avatar billede terry Ekspert
24. maj 2003 - 14:23 #6
SELECT   
FROM        dbo.tblCategory INNER JOIN
                      dbo.tblSupport ON dbo.tblCategory.fldID = dbo.tblSupport.fldCategory INNER JOIN
                      dbo.tblLanguage ON dbo.tblSupport.fldLanguage = dbo.tblLanguage.fldID
Avatar billede terry Ekspert
24. maj 2003 - 14:23 #7
This is from SQL server you can drop the dbo
Avatar billede htm Nybegynder
24. maj 2003 - 14:23 #8
Men ellers ville jeg gøre det via where-sætninger det går hurtigere

SELECT * FROM tblSupport, tblLanguage, tblCategory
WHERE tblSupport.fldID = tblLanguage.fldID
AND tblSupport.fldID = tblCategory.fldID
ORDER BY tblSupport.fldID
Avatar billede terry Ekspert
24. maj 2003 - 14:28 #9
SELECT    dbo.tblCategory.*, dbo.tblSupport.*, dbo.tblLanguage.*
FROM        dbo.tblCategory INNER JOIN
                      dbo.tblSupport ON dbo.tblCategory.fldID = dbo.tblSupport.fldCategory INNER JOIN
                      dbo.tblLanguage ON dbo.tblSupport.fldLanguage = dbo.tblLanguage.fldID
ORDER BY tblSupport.fldID, tblSupport.fldLanguage
Avatar billede terry Ekspert
24. maj 2003 - 14:30 #10
Access should be
SELECT    tblCategory.*, tblSupport.*, tblLanguage.*
FROM      tblCategory INNER JOIN
          tblSupport ON tblCategory.fldID = tblSupport.fldCategory INNER JOIN
          tblLanguage ON tblSupport.fldLanguage = tblLanguage.fldID
ORDER BY tblSupport.fldID, tblSupport.fldLanguage
Avatar billede htm Nybegynder
24. maj 2003 - 14:30 #11
Ups mit nummer to eks. skal selv. være:

SELECT tblSupport.*,tblLanguage.*,tblCategory.* FROM tblSupport, tblLanguage, tblCategory
WHERE tblSupport.fldID = tblLanguage.fldID
AND tblSupport.fldID = tblCategory.fldID
ORDER BY tblSupport.fldID
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:32 #12
Terry >> Det er en Access database

Htm >> Kan godt være jeg vælger at lave det med WHERE sætninger så ... venter lige lidt og ser ...

Begge >> Der hvor jeg prøver at bruge sql-sætning er på en ASPX-side og den giver fejl på jeres forslag (her vist med htm's forslag):

Syntax error (missing operator) in query expression 'tblSupport.fldID = tblLanguage.fldID INNER JOIN tblCategory ON tblSupport.fldID = tblCategory.fldID'.

linien ser sådan her ud:

myDataAdapter.SelectCommand = new OleDbCommand("SELECT * FROM tblSupport INNER JOIN tblLanguage ON tblSupport.fldID = tblLanguage.fldID INNER JOIN tblCategory ON tblSupport.fldID = tblCategory.fldID ORDER BY tblSupport.fldID;", myConnection);

Hvorfor ?
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:33 #13
Ups havde ikke set de sidste tre svar ... kigger lige på dem ...
Avatar billede terry Ekspert
24. maj 2003 - 14:35 #14
SELECT tblSupport.*, tblCategory.fldName AS fldLanguageName, tblLanguage.fldName AS fldCategoryName
FROM  tblCategory INNER JOIN
      tblSupport ON tblCategory.fldID = tblSupport.fldCategory INNER JOIN
      tblLanguage ON tblSupport.fldLanguage = tblLanguage.fldID
ORDER BY tblSupport.fldID, tblSupport.fldLanguage
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:40 #15
De virker heller ikke ... Får samme fejl ...
Skal der mon være en adskilles mellem første og anden INNER JOIN eller noget ?
Avatar billede terry Ekspert
24. maj 2003 - 14:40 #16
Torbem if you arehaving problems with this in ASP then I suggest you make a query in the Access dB then use the query in your ASP

SELECT * FROM YourAccessQuery
Avatar billede terry Ekspert
24. maj 2003 - 14:41 #17
THis SQL DOES work!
Avatar billede terry Ekspert
24. maj 2003 - 14:41 #18
Try making a select on a single table, if that works then on two an dso on.
Avatar billede terry Ekspert
24. maj 2003 - 14:42 #19
are you 100% sure hat the table and field names are correct?
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:47 #20
Jeg kan ikke finde ud af at bruge Access's Query Design til at designe min sql-sætning

Men hvis jeg sætter den sidste af dine sql-sætinger (24/05-2003 14:35:33) ind i Access's SQL under Queryies får jeg samme fejl :-/
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:48 #21
Jeg kontrollere lige tabel og felt-navnene ...
Avatar billede terry Ekspert
24. maj 2003 - 14:48 #22
Copy and paste this into the SQL window
SELECT tblSupport.*, tblLanguage.fldName AS fldLanguageName, tblCategory.fldName AS fldCategoryName
FROM tblCategory INNER JOIN (tblLanguage INNER JOIN tblSupport ON tblLanguage.fldID = tblSupport.fldLanguage) ON tblCategory.fldID = tblSupport.fldCategory;
Avatar billede terry Ekspert
24. maj 2003 - 14:49 #23
I have just made this in Access and it works!
Avatar billede terry Ekspert
24. maj 2003 - 14:51 #24
Try the SQL i gave 24/05-2003 14:48:44 Seems access MUST have () !!
Avatar billede htm Nybegynder
24. maj 2003 - 14:53 #25
Prøv dette ellers:

SELECT tblSupport.*,tblLanguage.fldName AS Languagename,tblCategory.fldName AS categoryname
FROM tblSupport
INNER JOIN tblLanguage ON tblSupport.fldID=tblLanguage.fldID
INNER JOIN tblCategory ON tblSupport.fldID=tblCategory.fldID
ORDER BY tblSupport.fldID

Men jeg vil anbefale dig at bruge Where-sætningerne! Har du prøvet dem?
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:55 #26
Terry den siste du gav mig virker både i Access og i ASP.NET.
Skyldes fejlen () ?
Hvorfor er det FROM tblCategory og ikke tblSupport ? Gør det nogen forskel ?
Avatar billede terry Ekspert
24. maj 2003 - 14:56 #27
htm why use WHERE when INNER JOIN works? The SQL I have given works on tables/fields given by Torben, tested in Access and SQL Server!
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 14:56 #28
htm >> Har ikke prøvet dem endnu ... Troede at det var bedre at bruge INNER JOIN ... Hvorfor er det bedre med med WHERE ?
Avatar billede htm Nybegynder
24. maj 2003 - 14:59 #29
Terry>> Why use something that are faster, when this works? ;o)

torben>> Det er klart min opfattelse at det er hurtigere at bruge Where!
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 15:02 #30
htm >>

Den sidste virkede heller ikke ... men det gør jo så heller ikke så meget nu :)
Har du dokumentation for at det er hurtigere ?

Terry >>

Hvorfor er det FROM tblCategory og ikke tblSupport ?

Begge >>

Jeg har smidt lidt point oveni (140 p). Hvordan vil I ha' dem fordelt ?
Avatar billede terry Ekspert
24. maj 2003 - 15:10 #31
Din opfattelse! Where is the evidence? IF a WHERE is faster (which it may be) then I find it strange that the SQL generated almost always uses JOINS!

Yes it seems access MUST have ()
Not sure what you mean here: (Hvorfor er det FROM tblCategory og ikke tblSupport ? ) I am selecting FROM support!
Torben its up to you to decide how the points are shared!
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 15:14 #32
Terry >> Jeg mener hvorfor den laver INNER JOIN på tblSupport og så laver SELECT FROM på tblCategory, istedet for at lave INNER JOIN på tblCategory og SELECT FROM på tblSupport ... Det virker mere logisk da tblSupport er hovedtabellen ...

Forstår du hvad jeg mener ?

htm >> Vil også gerne se nogle beviser for at det skulle være hurtigere ... så forstår jeg ikke hvorfor INNER JOIN overhovedet er opfundet?
Avatar billede htm Nybegynder
24. maj 2003 - 15:17 #33
Jeg kan ikke lige finde noget dokumentation ligenu på at det er hurtigere, men det er mine egne erfaringer!
Avatar billede terry Ekspert
24. maj 2003 - 15:20 #34
The FROM isnt the first table name it is ALL three.
I've just made the same query again but added the fields in a different order, now see how it looks, but the result is the same

SELECT tblSupport.*, tblLanguage.fldName AS fldLanguageName, tblCategory.fldName AS fldCategoryName
FROM (tblSupport INNER JOIN tblLanguage ON tblSupport.fldLanguage = tblLanguage.fldID) INNER JOIN tblCategory ON tblSupport.fldID = tblCategory.fldID
ORDER BY tblSupport.fldID, tblSupport.fldLanguage;
Avatar billede terry Ekspert
24. maj 2003 - 15:22 #35
htm>If your "erfaringer" is that a where is faster then its best to use what you feel is best, I would do the same until proven wrong :o)
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 15:22 #36
Htm >> Okay ... sig til hvis du finder noget dokumentation ... Jeg giver dig lidt mindre point da jeg vælger bruge terry's løsning i første omgang ... men da jeg ikke havde tænkt på at det bare kunne laves med WHERE så det får du da lidt point alligevel :)

Terry >> Okay tak for svaret ... det hjalp på forståelsen :)

Begge >> Mange tak for hjælpen! Håber jeg kan hjælpe jer en anden gang :)
Avatar billede terry Ekspert
24. maj 2003 - 15:26 #37
Thanks Torben,
I would suggest that you try using Access's query designer, it will save you lots of time in getting your SQL working in your ASP. Just drag and drop the tables you want into the query window and then drag and drop the related fields.
Avatar billede torbenmelander Nybegynder
24. maj 2003 - 15:27 #38
Terry >> Tak for rådet ... jeg må heller begynde at rodde lidt med den Query Designer :)
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
Computerworld tilbyder specialiserede kurser i database-management

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