Avatar billede webnoob Nybegynder
21. marts 2006 - 23:08 Der er 22 kommentarer og
2 løsninger

Join tables automatisk

Jeg har en database med 5 tabeller jeg gerne vil joine, men hvordan?
Avatar billede arne_v Ekspert
21. marts 2006 - 23:48 #1
SELECT *
FROM t1,t2,t3,t4,t5
WHERE t1.a=t2.a AND t2.b=t3.b AND t3.c=t4.c AND t4.d=t5.d

eller ??
Avatar billede webnoob Nybegynder
22. marts 2006 - 07:33 #2
Ved ikke om det er det rigtige jeg har gjort, men på selve sql-serveren har jeg trukket en kolonne, fra en table, og på en anden kolonne, i en anden table og på den måde skabt et relationship mellem de to tabeller. Er det det samme som join eller har jeg lavet noget helt hen i vejret???
Avatar billede ldanielsen Nybegynder
22. marts 2006 - 09:52 #3
Hvilken version af SQL-Server har du? Beskriv nærmere hvordan du har lavet det "relationship" du snakker om.

Det lyder som om du har oprettet en Foreign Key, dvs. et index der definerer en forbindelse mellem to tabeller, og som kan sikre at der altid findes relaterede data. Man kan for eks. i en butik sørge for at en vare ikke kan slettes hvis den findes i en ordre, fordi ordren i givet fald ville blive ulæselig. Dette er ikke et JOIN, trods det at det ofte handler om de samme forbindelser mellem data som man vil joine på.

At joine tabeller er noget man gør i sine SELECT statements, som arne_v skitserer det.
Avatar billede webnoob Nybegynder
22. marts 2006 - 17:32 #4
Jeg bruger MS sql 2000 server. Jeg har 3 tabeller som håndtere vare nogen af kolonnenavnene går igen i de forskellige tabeller, jeg har sat et par af kolonnerne som primær nøgler og lave en form for drag 'n' drop på de kolonner som hedder det sammen og der med er der skabt en relation.

Jeg har søgt hjælp på selve serveren og fik det er ud af det.

Joining Tables Manually
When you add two (or more) tables to a query, the Query Designer attempts to join them based on common data or on information stored in the database about how tables are related. For details, see Joining Tables Automatically. However, if the Query Designer has not joined the tables automatically, or if you want to create additional join conditions between tables, you can join tables manually.

You can create joins based on comparisons between any two columns, not just columns that contain the same information. For example, if your database contains two tables, titles and roysched, you can compare values in the ytd_sales column of the titles table against the lorange and hirange columns in the roysched table. Creating this join would allow you to find titles for which the year-to-date sales falls between the low and high ranges for the royalty payments.

Tip  Joins work fastest if the columns in the join condition have been indexed. In some cases, joining on unindexed columns can result in a slow query. For information about creating indexes using the Visual Database Tools, see Indexes.

To manually join tables or table-structured objects

Add to the Diagram pane the objects you want to join.


Drag the name of the join column in the first table or table-structured object and drop it onto the related column in the second table or table-structured object. You cannot base a join on text, ntext, or image columns.
Note  The join columns must be of the same (or compatible) data types. For example, if the join column in the first table is a date, you must relate it to a date column in the second table. On the other hand, if the first join column is an integer, the related join column must also be of an integer data type, but it can be a different size. The Query Designer will not check the data types of the columns you use to create a join, but when you execute the query, the database will display an error if the data types are not compatible.

If necessary, change the join operator; by default, the operator is an equal sign (=). For background, see Join Comparison Operators.  For details, see Modifying Join Operators.
The Query Designer adds an INNER JOIN clause to the SQL statement in the SQL pane. You can change the type to an outer join. For details see Creating Outer Joins.
Avatar billede ldanielsen Nybegynder
22. marts 2006 - 18:48 #5
Har du stadig problemer?
Avatar billede webnoob Nybegynder
22. marts 2006 - 19:19 #6
ja
Avatar billede webnoob Nybegynder
22. marts 2006 - 19:19 #7
har tilsynladende ikke lavet join rigtigt
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 09:04 #8
Jeg forstår ikke hvad dit problem er, men jeg kan da gætte:

Du vil lave et view, så du går ind i Enterprise Manager, og vælger New View. Så tilføjer du nogle tabeller, og idet de dukker frem dannes der nogler joins, men de er forkerte.

Eller du forventer at der dannes joins, men det gør der ikke.

Er jeg på sporet?
Avatar billede webnoob Nybegynder
23. marts 2006 - 17:05 #9
egentlig ikke ;o), jeg er igang med at lave en webshop og skal lave en join af tre tabeller, men kan ikke finde ud af det. Søgte på det i Enterprise Manager og ffandt den tekst som jeg har postet 22/03-2006 17:32:00.
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 21:38 #10
Så lad os se hvilke tre tabeller det er, så skal vi hjælpe dig med at joine dem. Hvilke primærnøgler er der, og hvilke felter skal være fremmednøgler, dvs. hvilke skal joinet pege på?
Avatar billede ldanielsen Nybegynder
23. marts 2006 - 21:41 #11
arne_v's først post er faktisk nok det svar du søger. Blot er der to måder at joine på, resultatet er det samme, men syntakse forskellig

SELECT *
FROM tabel1, tabel2, tabel3
WHERE tabel1.a = tabel2.a AND tabel2.b = tabel3.b

eller

SELECT *
FROM tabel1 INNER JOIN tabel2 ON
tabel1.a = tabel2.a INNER JOIN tabel3 ON
tabel2.b = tabel3.b
Avatar billede webnoob Nybegynder
23. marts 2006 - 21:43 #12
hvor meget styr har du på MS sql server? Da jeg søgte på Join tables, vare et af resultaterne Join tables Automaticly, hvordan gør man det?
Avatar billede webnoob Nybegynder
23. marts 2006 - 21:50 #13
Du kan se de tre tabeller jeg gerne vil lave en join med, på denne her adresse
www.millet-design.dk/billeder/gif/tables.gif
Avatar billede ldanielsen Nybegynder
24. marts 2006 - 09:14 #14
Automatiske Joins dannes når man tilføjeg tabeller til et view, hvis MSSQL kan finde noget at joine på. Men det var det jeg spurgte til 23/03-2006 09:04:42, og det er åbenbart ikke det du vil. Jeg forstår stadig ikke hvad det er du vil. Du slipper ikke for at JOIN'e tabellerne i SQL'en, men du kan få hjælp til det på den måde jeg nævnte.

Ang tabellerne: De mangler åbenbart alle primærnøgler, det skal du have ordnet. Og så skal du lige forklare mig hvad meningen er: shop_varer indeholder alle varer (som kunne være sko), og i shop_storrelse angives de forskellige størrelser for en given vare, samt hvor mange der er af den

Så de to kan joines sådan:

SELECT * FROM shop_varer
INNER JOIN shop_storrelse ON
shop_varer.VareID = shop_storrelse.VareID
Avatar billede ldanielsen Nybegynder
24. marts 2006 - 09:15 #15
Den sidste tabel forstår jeg ikke meningen med, er det varekategorier?
Avatar billede webnoob Nybegynder
25. marts 2006 - 21:39 #16
Primær nøgler´, bruger man også det når man skal lave en join? Mine tre tabeller hænger sådan her sammen.

Shop_varer indeholder alle vare og der får de deres ID. Shop_varer_str_ref er en reference table. Alle varer skal kunne se i flere undergrupper. Men eftersom at en vare kun skal have et ID så måtte jeg lave en table der holder styr på hvilke vareID'er der ligger i hvilke undergrupper og hvilket undergruppeID de også har. Shop_storrelser, ja den siger jo sig selv, den holder styr på hvilke vare har der kan fåes i hvilke størrelser og da varerene kun kan have et vareID skal der jo en table til at holde styr på det.

Håber det er forklaring nok til at du kan forstå have det er mine tabeller gør.
Avatar billede ldanielsen Nybegynder
26. marts 2006 - 23:18 #17
Dt lyder helt fint alt sammen.

Alle tabeller skal have en primær nøgle, det har ikke noget at gøre med om du joiner eller ikke.

Et join er ikke noget du laver fast mellem tabellerne, sådan at to tabeller kommer til at hænge sammen. Et JOIN er betegnelse for den måde du SELECT'er data på, når det er relatedede data, som i din situation.

Hvis jeg vil se hvilke størrelser jeg kan få varen med VareID 25 i:

SELECT strVarenavn, intStoerrelse FROM shop_varer INNER JOIN Shop_storrelser
ON shop_varer.VareID = Shop_storrelser.VareID WHERE VareID = 25

Resultatet vil, hvis der nu er syv størrelser, være noget der ligner:

strVarenavn  intStoerrelse
--------------------------
gummistøvle  38
gummistøvle  39
gummistøvle  41
gummistøvle  40
gummistøvle  45
gummistøvle  43
gummistøvle  44


Her er to af tabellerne altså joinet.

Hvis du vil se hvilke varer der er i en undergruppe vil du gøre noget tilsvarende med Shop_varer og Shop_varer_str_ref.

Primærnøgler og fremmednøgler kommer ind i sagen af performance grunde. Du vil nemlig næste altid bruge primærnøglen fra den ene tabel som den ene ende af join'et, her VareID i tabellen Shop_varer. Den anden ende af joineter derimod ikke en primærnøgle, men hvis du registrerer det felt der bruge som en fremmednøgle, så vil det gøre ydelsen meget bedre. Og det er måske det du har gjort med de streger du snakkede om at du trak.

Jeg ville ønske du ville fortælle hvordan det var du lavede dem, så kan jeg fortælle hvad det var du gjorde.
Avatar billede webnoob Nybegynder
27. marts 2006 - 17:39 #18
Idanielsen, jeg skal lige love for jeg er blevet en del klogere her i weekenden. Jeg valgte at bruge 4 timer på at fordybe mig i min SQL server's help guide og har læst mere end jeg nogensinde gjorde i folkeskolen.

Det jeg har fundet ud af er at man kan lave et view i selve databasen, det er der en wizard der kan lave for en, ved at man fortæller den hvilken tabeller den skal kigge i og hvilke kolonner i disse, derefter skal man selv kort lave en WHERE sætning. Ud fra det danner Enterprise Manager to SQL strenge. Den ene med hele joinet i og en "bare" et viewet som også er en SQL streng. Man kan så selv vælge hvilken man vil bruge, jeg vælger at bruge den til viewet og den ser sådan her ud:

SELECT * FROM shop_varer_VIEW

Den SQL streng hvor man har join, inner join og hvad man nu ellers kan bruger vil for mit vedkommende se sådan her ud:

SELECT shop_storrelse.storrelse, shop_storrelse.antal, shop_varer.vareID, shop_varer.varenummer, shop_varer.model,shop_varer.pris, shop_varer.tilbudspris, shop_varer.beskrivelse, shop_varer.billede, shop_varer.synlig, shop_varer_str_ref.undergruppeID
FROM shop_varer_str_ref INNER JOIN shop_varer ON shop_varer_str_ref.vareID = shop_varer.vareID CROSS JOIN shop_storrelse

Og det er løsningen på mit spørgsmål, et automatisk JOIN. Nu ved jeg så bare ikke om jeg bliver upopulær ved at sige jeg ikke mener I skal have point på det her spørgsmål. Jo I har hjulpet mig lidt, men kommet med svar på en automatisk JOIN har I ikke.

Jeg vælger at vente med at afslutte det her spørgsmål til jeg har hørt jeres reaktion.
Avatar billede arne_v Ekspert
28. marts 2006 - 02:48 #19
jeg har stadig ikke forstået hvad du vil (mig bekendt er der ikke nogen
forskelle på joins i views og andre steder) => jeg skal ikke have nogle point
Avatar billede webnoob Nybegynder
28. marts 2006 - 07:26 #20
Næ jeg mener heller ikke der er forskel på join i sql på en ASP side eller på selve serveren, men det jeg ledte efter var hvordan man gør det automatisk. Og ved at gøre det i view på serveren så er det stort set at gøre det automatisk.
Avatar billede ldanielsen Nybegynder
28. marts 2006 - 10:28 #21
Ja, du bliver lidt upopulær, især når du har taget pointene selv i 27 af de 46 spm. du har stillet. Jeg ved godt at du er "fattig" på point, men hvis det er derfor, så sig det, i stedet for at sige at du ikke har fået et ordentligt svar.

I øvrigt skal du også lige huske at svare på de spørgsmål svarerne stiller, for det kan godt være svært at forstå hvad spm. drejer sig om.

Jeg har hele vejen forsøgt at forstå hvad du mener, har spurgt til om vi taler om de joins der automatisk fremkommer i Query designer. Se Kommentar: ldanielsen, 23/03-2006 09:04:42

Det er den eneste form for automatiske joins der kan være tale om, og da det ikke var det det handlede om antog jeg at det emne var uddebateret.

Automatiske joins er ikke en feature som du kan regne med, for du skal altid checkke at de er rigtige alligevel. De sparer dig blot for et par museklik.

Jeg mener at du har fået en del mere end du spurgte om. Blot er du måske skuffet over at det ikke kan gøres så let og automatisk som du troede.

God ide at læse, det kan anbefales!
Avatar billede webnoob Nybegynder
28. marts 2006 - 17:29 #22
Jeg kan udemærket følge dig i hvad du mener og ja jeg kan godt se at jeg ikke har fået svaret jer så I kunne komme tættere på en forståelse af hvad jeg mener og hvad jeg skal have hjælpe til.

Jeg har sådan set og så besluttet mig for at give jeg 30 point hver da jeg i en eller anden form at spildt jeres tid, også selv om arne_v har givet udtryk for at han ikke skal have point.

Så lig et svar, begge to.

PS. jeg skal senere i aften komme med en beskrivelse for hvad det var jeg søgt hjælpe til.
Avatar billede arne_v Ekspert
28. marts 2006 - 18:51 #23
ok
Avatar billede ldanielsen Nybegynder
29. marts 2006 - 07:06 #24
ok

Den beskrivelse skal ikke lave for min skyld, kun hvis du selv synes.
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