Avatar billede briank Nybegynder
08. juli 2002 - 23:49 Der er 4 kommentarer og
1 løsning

join af flere tabeller

Hej

Jeg ønsker at joine 2 tabeller og resultatet skal bindes op mod et datagrid. En normal bind foregår altid mod en enkelt tabel men her ønsker jeg et antal felter fra f.eks 2 tabeller som skal vises i et datagrid.

Sql-eksempel : select a.felt1, b.felt2
              from tabel a, tabel b
              where a.id = b.id

jeg har ledt efter eksempler men uden held. Det eneste jeg ønsker er et eksempel skåret ud i pap :-) eller et brugbart link.

Håber at der er nogen der kan hjælpe :-)

Mvh
BrianK
Avatar billede odegaard Nybegynder
09. juli 2002 - 00:02 #1
Prøv den her: (ikke testet)
select a.felt1, b.felt2
from a INNER JOIN b ON a.ID = b.ID
Avatar billede nazaq Nybegynder
09. juli 2002 - 07:51 #2
Hej Brian

Du var nok kommet længere i en database gruppe men....
Jeg går ud fra at det du gerne vil ha' er en forklaring på den SQL sætning du har vist.
En SQL som skal udvælge data starter altid med en SELECT sætning:

      SELECT felt1, felt2

i dette tilfælde vil vi have felt1 og felt2 vist ( en * vælger alle felter)
Så skal vi beskrive hvor vi får dataene fra (FROM sætning):

      FROM tabel1

Dit problem er dog at felt1 og felt2 befinder sig i 2 forskellige tabeller nemlig tabel1 og tabel2, derfor skal der en join til.

      FROM tabel1, tabel2

Når man joiner kan man give de tabeller man udvælger et alias så de er nemmere at have med at gøre.

      FROM tabel1 AS a, tabel2 AS b

AS tildeler et aliat men det er spild af tid at skrive AS så man lader være, samtidig kan man så fortælle SQL hvilken tabel felterne tilhøre:

      SELECT a.felt1, b.felt2
      FROM tabel1 a, tabel2 b

Her vælges felt1 fra tabel1 og felt2 fra tabel2.
Det eneste vi mangler nu er at fortælle hvordan de 2 tabeller skal bindes sammen. Dette gøres med ON kommandoen:

      FROM tabel1 a, tabel2 b ON a.id = b.id
     
Denne linie binder de to tabeller så de records i tabel1 og tabel2 der har samme værdi i id bliver parret.

Den endellige sætning bliver så:

      SELECT a.felt1, b.felt2
      FROM tabel1 a, tabel2 b ON a.id = b.id

Herefter kan du så begrænse resultatet af søgningen med en WHERE sætning f.eks:

      SELECT a.felt1, b.felt2
      FROM tabel1 a, tabel2 b ON a.id = b.id
      WHERE a.felt1 = 'test3'
     
tabel1 består af 2 kolonner id og felt1, tabel2 består af id og felt2:

  id|felt1
  --------
  01 test1
  02 test2
  03 test3

  id|felt2
  --------
  01 t1
  02 t2
  03 svar
 
Din SQL binder de 2 tabeller sammen til en:

  id|felt1|felt2
  --------------
  01 test1 t1
  02 test2 t2
  03 test3 svar

Du vil kun have felt1 og felt2 så id skrælles af

  felt1|felt2
  -----------
  test1 t1
  test2 t2
  test3 svar
 
Så sættes WHERE ind

  felt1|felt2
  -----------
  test3 svar
 
Som så er dit resultat.
Håber det hjalp lidt og jeg har forstået dit spørgsmål

/NaZaq
Avatar billede briank Nybegynder
09. juli 2002 - 23:42 #3
tak for svaret men det jeg ønsker er at joine 2 tabeller i C# .NET
Jeg har ikke forståelsesproblemer med sql men .NET er nyt for mig. Nedenstående linier binder data fra tabellen customers til et datagrid og det virker helt fint MEN hvis jeg nu ønsker at joine tabellen Customers med f.eks en ordertabel, hvordan takler jeg så kommandoen FILL da den kun refererer til EN tabel

Jeg håber at jeg har gjort spørgsmålet så klart som muligt :-)

            OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from Customers", myConnection);

            DataSet ds = new DataSet();
            myCommand.Fill(ds, "Customers");

            DataView Source = ds.Tables["Customers"].DefaultView;
            Source.Sort = (string)Session["sortField"];

            MyDataGrid.DataSource=Source;
            MyDataGrid.DataBind();
            myConnection.Close();

Mvh
BrianK
Avatar billede odegaard Nybegynder
10. juli 2002 - 11:22 #4
Hmm... kan man det? Alternativ kan du jo selv lave en rutine der tilføjer en kolonne til datasættet og løber datasættene igennem.
Avatar billede briank Nybegynder
10. juli 2002 - 21:48 #5
jeg har løst mit problem med en datareader og takker for svarene

Mvh
Brian K
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