Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:16 Der er 20 kommentarer og
1 løsning

fra inner Join til Tabel1.ID=Tabel2.ID

Hvordan laver jeg min select om, sådan at jeg ikke behøver at lave joins på denne måde?
Der er nemlig ingen relationer mellem mine tabeller så der udskrives ikke noget når min select ser ud på denne måde.

min select skulle gerne gøre det at den skriver alle de tabeller som ud som har en reference til @tablename samt deres ID og reference ID.

testDB.dbo.sysforeignkeys FK kan godt undlades

SELECT SO1.name AS Tab,
      SC1.name AS Col,
      SO2.name AS RefTab,
      SC2.name AS RefCol,
      FO.name AS FKName
FROM testDB.dbo.sysforeignkeys FK     INNER JOIN testDB.dbo.syscolumns SC1 ON FK.fkeyid = SC1.id AND FK.fkey = SC1.colid
                    INNER JOIN testDB.dbo.syscolumns SC2 ON FK.rkeyid = SC2.id AND FK.rkey = SC2.colid
                    INNER JOIN testDB.dbo.sysobjects SO1 ON FK.fkeyid = SO1.id
                    INNER JOIN testDB.dbo.sysobjects SO2 ON FK.rkeyid = SO2.id
                    INNER JOIN testDB.dbo.sysobjects FO ON FK.constid = FO.id where SO2.name=@cTableName
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:25 #1
DECLARE @cTableName NVARCHAR(50)
SET @cTableName = 'Licences'

SELECT SO1.[name] AS Tab,
      SC1.[name] AS Col,
      SO2.[name] AS RefTab,
      SC2.[name] AS RefCol,
      FO.[name] AS FKName
FROM testDB.dbo.sysforeignkeys FK, testDB.dbo.syscolumns SC1,
testDB.dbo.syscolumns SC2, testDB.dbo.sysobjects SO1, testDB.dbo.sysobjects SO2,
testDB.dbo.sysobjects FO

WHERE FK.fkeyid = SC1.[id] AND FK.fkey = SC1.colid AND
FK.rkeyid = SC2.[id] AND FK.rkey = SC2.colid AND
FK.fkeyid = SO1.[id] AND FK.rkeyid = SO2.[id] AND
FK.constid = FO.[id] AND SO2.[name]= @cTableName
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:27 #2
Det virker ved mig, så skriv lige om det er noget du kan bruge.. :-)
Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:27 #3
HEHEHEHEH geniaaaalt

lav et svar
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:28 #4
Her kommer svaret, jeg formoder det virker? :-)
Avatar billede ldanielsen Nybegynder
30. marts 2006 - 09:29 #5
the_party_dog > Det er da også inner joins du laver
Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:30 #6
Det virkede lige som det skulle... Kunne ikke overskue alle de der '=' tegn :-) så det var fedt
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:30 #7
Personligt så HADER jeg inner join, jeg ved ikke hvorfor. Har alle dage brugt = tegnet, da jeg synes det er langt mere overskueligt...

Ups, det var vist hverken relevant eller noget :-)
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:31 #8
ldanielsen> Det er det... Men på en anden måde jo :-)

Jeg formodede at det var dette han mente, da han lavede spørgsmålet...
Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:31 #9
Men inner join virker vel kun hvis det er en relationel database... formoder jeg...Hmmm kom lige i tanke om at jeg ikke har tjekket på den rigtige database... Jeg vender lige tilbage
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:32 #10
Til min kommentar omkring at jeg hader Inner Join, så er det kun sætningen med Inner Join jeg hader ;o) Bare lige inden nogen hakker mig helt ned... Hehe
Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:33 #11
jaaa jeg er heller ikke rigtig til de der Inner,Outer Join kan også bedre lide De goe gamle '='
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:34 #12
mickni33> Hvis det ikke virker, sender jeg selvfølgelig dine points tilbage... :)
Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:35 #13
nåååå aahh det ok, du har jo gjort som jeg bad om :-)
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:41 #14
Har du testet det?

Jeg har kørt det på en af mine egen databaser og der fik jeg de oplysninger tilbage som du gerne ville have, på MSSQL 2000.
Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:45 #15
Jeg er i gang med at afprøve... men det vare lige lidt for jeg har 3 SQL scripts der lige skal passe sammen, Men hvis du har testet på en "ikke relationel database" så virker det sikkert også hos mig.. Kører også MSSQL2000
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 09:47 #16
Jeg venter bare til du har afprøvet det. :) Bare fordi det virker hos mig, er det ikke sikkert det virker hos dig. Det er jo trodsalt IT vi har med at gøre :-)
Avatar billede mickni33 Nybegynder
30. marts 2006 - 09:55 #17
Hmmm den udskriver ikk noget... kan det være noget med sysforeignkeys FK for jeg har ikk nogle relationer eller nøgler...

SELECT SO1.[name] AS Tab,
      SC1.[name] AS Col,
      SO2.[name] AS RefTab,
      SC2.[name] AS RefCol,
      FO.[name] AS FKName
FROM testDB.dbo.sysforeignkeys FK, testDB.dbo.syscolumns SC1,
testDB.dbo.syscolumns SC2, testDB.dbo.sysobjects SO1, testDB.dbo.sysobjects SO2,
testDB.dbo.sysobjects FO

WHERE FK.fkeyid = SC1.[id] AND FK.fkey = SC1.colid AND
FK.rkeyid = SC2.[id] AND FK.rkey = SC2.colid AND
FK.fkeyid = SO1.[id] AND FK.rkeyid = SO2.[id] AND
FK.constid = FO.[id] AND SO2.[name]='Person'
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 10:10 #18
Det vil jeg formode, fordi hvis du ikke har nogen relationer, vil der ikke stå noget i din foreignkeys tabel. Hvis den er tom, vil denne sql statement slet ikke virke.

Det du prøver på at opnå, er en oversigt over de tabeller som hænger sammen med hinanden, ik? Du vil jo ikke kunne se hvad der hænger sammen, når der ikke er relationer til at forbinde tabellerne.
Avatar billede mickni33 Nybegynder
30. marts 2006 - 10:12 #19
men hvis det ikke var system tabeller, så ville man jo godt kunne fange referencerne, så jeg tænkte at det måske også kunne gøres når det drejede sig om system tabeller
Avatar billede the_party_dog Nybegynder
30. marts 2006 - 10:20 #20
Nu skal jeg se om jeg er helt med på hvad du vil :-)

Du har en database med X antal tabeller. Der er ingen relationer imellem dem?

Hvad er det så helt præcis du vil se? Hvilke tabeller der er tilstede og deres kolonner?

Prøv at smide strukturen på nogle tabeller op, så kan vi se om vi kan finde ud af det sammen. Så kan vi begge lære lidt. :-)
Avatar billede mickni33 Nybegynder
30. marts 2006 - 11:09 #21
Ok smider lige noget senere..Er på arbejdet så ved ikke lige om jeg må ligge noget
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