Oprettet søn. d. 05. februar 2012 kl. 20:41:20

machholdt
machholdt (19.302 point. Point ude: 0)

Problem med join forbindelse i SQL forespørgsel

Hej

Jeg har et problem med nedenstående SQL sætning, meningen er at jeg skal trække systems.name, log.action, log.time, log.dependencyBool, log.initials ud.

Jeg har en DB struktur bestående af tre databaser, 1 til "systemlogs" kaldet log.
1 til systemer kaldet systems.
1 til at håndtere mange-til-mange relation mellem de to andre kaldet dependency.

Jeg har id-felter på alle tre tabellers indhold.
Desuden har en log-id, en relation til systems iform af feltet log.systemId.
Jeg skal trække hele log-tabellen ud, og istedet for at vise systemId skal den vise systemnavnet (på baggrund af systems.name).
Desuden skal den hver gang et logId eksisterer i dependency tabellen hente denne log ud flere gange og angive hvilket systemId der tilhøres i dependency.

Håber det er nogenlunde forståeligt, ellers må i spørge.

SELECT log.id, systems.name, log.action, log.time, log.dependencyBool, dependency.systemId, log.initials FROM log, systems LEFT OUTER JOIN dependency ON dependency.logId = log.id WHERE log.active=1 AND dependency.systemId = systems.name ORDER BY `time` DESC

Fejlbeskeden:
#1054 - Unknown column 'log.id' in 'on clause'

Skrevet søn. d. 05. februar 2012 kl. 20:47:23| #1

arne_v
arne_v (1.016.169 point)
proev og lav en JOIN mellem log og systems

jeg tror at

FROM log, systems LEFT OUTER JOIN dependency ON dependency.logId = log.id

laeses som

FROM log, (systems LEFT OUTER JOIN dependency ON dependency.logId = log.id)

Skrevet søn. d. 05. februar 2012 kl. 20:56:16| #2

machholdt
machholdt (19.302 point)
Hmm.

SELECT log.id, systems.name, log.action, log.time, log.dependencyBool, dependency.systemId, log.initials FROM log join systems LEFT OUTER JOIN dependency ON dependency.logId = log.id WHERE log.active=1 AND dependency.systemId = systems.name ORDER BY `time` DESC

Returnerer ingen rækker

Skrevet søn. d. 05. februar 2012 kl. 21:06:37| #3

arne_v
arne_v (1.016.169 point)
FROM (log join systems ON ???=???) LEFT OUTER JOIN dependency ON dependency.logId = log.id

Skrevet søn. d. 05. februar 2012 kl. 21:21:33| #4

machholdt
machholdt (19.302 point)
Ja, næsten. Dog returneres stadig et systemId fra dependency-tabellen. Kan jeg hente det systemnavn der hører til dette systemId samtidig ?

SELECT log.id, systems.name, log.action, log.time, log.dependencyBool, dependency.systemId, log.initials FROM (log join systems ON log.systemId=systems.id) LEFT OUTER JOIN dependency ON dependency.logId = log.id WHERE log.active=1 ORDER BY `time` DESC

Skrevet søn. d. 05. februar 2012 kl. 22:41:40| #5

arne_v
arne_v (1.016.169 point)
du har systems.name i listen med felter du selecter??

Skrevet man. d. 06. februar 2012 kl. 12:41:14| #6

machholdt
machholdt (19.302 point)
Ja, men skal jo sådan set bruge den to gange. Da hver enkelte log har et specifikt systemnavn tilknyttet. Men sagtens kan påvirke andre systemer (Ud fra dependency-tabellen). jeg vil have dependency.systemId vist som et systemnavn istedet?

Er det ligetil, siden du skriver det sådan? I så fald må du da gerne skære det ud i det velkendte materiale lidt tykkere end papir;-)

Skrevet tir. d. 07. februar 2012 kl. 03:11:45| #7

arne_v
arne_v (1.016.169 point)
saa skal du ogsaa joine dependency med systems

Skrevet tir. d. 07. februar 2012 kl. 13:16:30| #8

machholdt
machholdt (19.302 point)
SELECT log.id, systems.name, log.action, log.time, log.dependencyBool, dependency.systemId, log.initials FROM (log JOIN systems ON log.systemId=systems.id) LEFT OUTER JOIN (dependency JOIN systems AS ss ON ss.id=dependency.systemId) ON dependency.logId = log.id WHERE log.active=1 ORDER BY `time` DESC

Dette giver mig samme resultat, hvad gør jeg forkert?

Det skal forresten nævnes at nogle af de resultater der hives ud har null-værdi i dependency.systemId feltet, har det betydning når jeg skal joine den?

Hvis det har vil jeg bare løse det med en default værdi som hedder 0, som så vil matche et ikke-system i systems. Vil det være forkert?

Skrevet tir. d. 07. februar 2012 kl. 14:25:42| #9

machholdt
machholdt (19.302 point)
HEHE. Nu fik jeg det endelig til at virke:

SELECT log.id, systems.name, log.action, log.time, log.dependencyBool, sd.name as dependentSystem, log.initials FROM (log join systems ON log.systemId=systems.id) LEFT OUTER JOIN (dependency LEFT OUTER JOIN systems as sd ON dependency.systemId=sd.id) ON dependency.logId = log.id WHERE log.active=1 ORDER BY `time` DESC

Tak for hjælpen hr. V.
Vil de være så venlig at lægge et svar;-)

Skrevet ons. d. 08. februar 2012 kl. 04:38:09| #10


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Kopier alt fra een column til en anden med streng foran

Oprettet den 25. maj 2012 kl. 04.55
dmg giver 30 point for svar | Giv et svar »

Unique varchar

Oprettet den 25. maj 2012 kl. 04.34
dmg giver 30 point for svar | Giv et svar »

hvem kan flytte min webside fra MySQL 3 database til en...

Oprettet den 24. maj 2012 kl. 11.18
runebase giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger