Avatar billede Slettet bruger
25. februar 2005 - 09:30 Der er 25 kommentarer og
1 løsning

Joine 3 tabeller giver fejl..

Forsimplet ser min query sådan her ud:

SELECT * FROM tbl1 RIGHT JOIN (tbl2 RIGHT JOIN tbl3 ON (tbl2.row2 = tbl3. row3) OR (tbl2. row2 = tbl3. row3)) ON (tbl1.row1 = tbl3.row3) OR (tbl1.row1 = tbl2.row2);

fejlen kommer af den sidste (yderste) join, som er ON (tbl1.row1 = tbl3.row3) OR (tbl1.row1 = tbl2.row2)
Jeg har fundet frem til, at fejlen ligger i, at jeg bruger 3 tabeller i den join. jeg får fejlen Join expression not supported (fejl 3296).. hvordan kan jeg lave min query, så jeg ikke får denne fejl??
Avatar billede overchord Nybegynder
25. februar 2005 - 10:43 #1
Hvad sker der hvis du fjerner din OR statements?
pt er de alligevel den samme (ved ikke om det er tilfaeldet i din rigtige query)

Se om du stadig faar fejl med:
SELECT * FROM tbl1 RIGHT JOIN (tbl2 RIGHT JOIN tbl3 ON (tbl2.row2 = tbl3. row3)) ON (tbl1.row1 = tbl3.row3);
Avatar billede Slettet bruger
25. februar 2005 - 10:53 #2
jeg er kommet til at skrive forkert.. det skulle være
SELECT * FROM tbl1 RIGHT JOIN (tbl2 RIGHT JOIN tbl3 ON (tbl2.row1 = tbl3. row2) OR (tbl2.row1 = tbl3.row3)) ON (tbl1.row1 = tbl3.row1) OR (tbl1.row1 = tbl2.row1);

Det virker fint, hvis jeg kun har den ene af (tbl1.row1 = tbl3.row1) og (tbl1.row1 = tbl2.row1):
Avatar billede terry Ekspert
25. februar 2005 - 11:22 #3
You can NOT use an OR in a JOIN

Try using the query builder. Add the tables to the query and then make the JOINS using drag and drop. Then right click on the thin line and choose from the three choises to giv eyou an INNER, LEFT or RIGHT join.
Avatar billede Slettet bruger
25. februar 2005 - 11:55 #4
Det virker fint med OR i den 2. JOIN: (tbl2 RIGHT JOIN tbl3 ON (tbl2.row1 = tbl3. row2) OR (tbl2.row1 = tbl3.row3)).. jeg kan lægge et billede op på nettet, der viser, hvad jeg mener..
Avatar billede terry Ekspert
25. februar 2005 - 12:15 #5
yes can we see that picture?
Avatar billede Slettet bruger
25. februar 2005 - 12:17 #6
working on it..
Avatar billede Slettet bruger
25. februar 2005 - 12:19 #7
kan jeg sende det til din email? den computer, jeg sidder ved, kan ikke connecte til ftp...
Avatar billede terry Ekspert
25. februar 2005 - 12:21 #8
do you still have my email?
Avatar billede terry Ekspert
25. februar 2005 - 12:23 #9
you can send the dB if you want. (compacted)
Avatar billede Slettet bruger
25. februar 2005 - 12:27 #10
du skulle få en mail med billedet..
Avatar billede terry Ekspert
25. februar 2005 - 12:37 #11
The diagram doesnt reflect the SQL abovem can we see the correct SQL, or at least the JOINS!
Avatar billede Slettet bruger
25. februar 2005 - 12:37 #12
der skal altid være en sammenhæng mellem singlesystem.name og testing.[test platform].. denne sammenhæng kan være direkte, eller den kan komme igennem tabellen multisystem.. Den query, der kommer ud af tabelsammenhængen på tegningen ser sådan her ud:

SELECT
FROM testing RIGHT JOIN (multisystem RIGHT JOIN singlesystem ON (multisystem.member_4 = singlesystem.name) AND (multisystem.member_3 = singlesystem.name) AND (multisystem.member_2 = singlesystem.name) AND (multisystem.member_1 = singlesystem.name)) ON (testing.[Test platform] = singlesystem.name) AND (testing.[Test platform] = multisystem.name);

multisystem.member_1 - 4 er ikke ens, og derfor omskrives de første 3 AND til OR..
Denne query giver det rigtige output:

FROM multisystem RIGHT JOIN singlesystem ON (multisystem.member_4 = singlesystem.name) OR (multisystem.member_3 = singlesystem.name) OR (multisystem.member_2 = singlesystem.name) OR (multisystem.member_1 = singlesystem.name);

Men hvis jeg smider den 1. JOIN på, kommer der fejl:

SELECT *
FROM testing RIGHT JOIN (multisystem RIGHT JOIN singlesystem ON (multisystem.member_4 = singlesystem.name) OR (multisystem.member_3 = singlesystem.name) OR (multisystem.member_2 = singlesystem.name) OR (multisystem.member_1 = singlesystem.name)) ON (testing.[Test platform] = singlesystem.name) OR/AND (testing.[Test platform] = multisystem.name)

Denne fejl forekommer uanset, om der står OR eller AND.. Jeg kan undgå fejlen, hvis jeg kun skriver den ene af (testing.[Test platform] = singlesystem.name) og (testing.[Test platform] = multisystem.name)
Avatar billede terry Ekspert
25. februar 2005 - 12:39 #13
when you JOIN on more than one field as you are doing between single system and multisystem then you get an AND not an OR
Avatar billede Slettet bruger
25. februar 2005 - 12:44 #14
ja.. querybuilder giver den første query.. de andre har jeg selv skrevet om..
Avatar billede terry Ekspert
25. februar 2005 - 12:57 #15
OK, so you are altering the AND to an OR manually!

Not quite sure I understand what your tryin to do but try this to see if it helps.

Remove the RIGHT JOIN between multisystem and testing. Then add the testing table again. Now make RIGHT JOIN between multisystem and the new table (multisystem_1)
Avatar billede Slettet bruger
25. februar 2005 - 13:03 #16
hmm.. hvilken skal jeg adde igen?? multisystem eller testing?
Avatar billede terry Ekspert
25. februar 2005 - 13:07 #17
testing
Avatar billede Slettet bruger
25. februar 2005 - 13:11 #18
jeg kan lige forklare, hvad jeg skal..

-jeg skal have selected fra testing, hvor testing.[test platform] = singlesystem.name
OR testing.[test platform] = multisystem.name

-multisystem.member_1 - 4 referere til singlesystem.name

-jeg skal bruge singlesystem.hours i alle rows..

-hvis testing.[test platform] = multisystem.name skal der hentes fra singlesystem.hours hvor multisystem.member_1 = singlesyste.name OR multisystem.member_2 = singlesyste.name OR multisystem.member_3 = singlesyste.name OR multisystem.member_4 = singlesyste.name
Avatar billede Slettet bruger
25. februar 2005 - 13:13 #19
men den select skal vel så være UNION ALL??
Avatar billede Slettet bruger
25. februar 2005 - 13:14 #20
jeg får i hvert fald ikke noget name fra multisystem.. jeg prøver lige at rode lidt med UNION, og vender tilbage..
Avatar billede Slettet bruger
25. februar 2005 - 13:28 #21
jeppsen.. så fandt jeg ud af det..

SELECT * FROM testing INNER JOIN (multisystem INNER JOIN singlesystem ON (multisystem.member_4 = singlesystem.name) OR (multisystem.member_3 = singlesystem.name) OR (multisystem.member_2 = singlesystem.name) OR (multisystem.member_1 = singlesystem.name)) ON (testing.[test platform] = multisystem.name
UNION ALL
SELECT * FROM singlesystem INNER JOIN testing ON (singlesystem.name = testing.[test platform];

TAK for din hjælp :P..
Avatar billede terry Ekspert
25. februar 2005 - 13:28 #22
I think my problem is that I dont have any knowledge of your requirement, so I can only comment on the information I am given.

Will a record always exist in testing, and maybe in singlesystem OR multisystem?
If you answer YES to this then your diagram is NOT correct§!
Avatar billede Slettet bruger
25. februar 2005 - 13:41 #23
så svare jeg nej :P.. der skal altid være en record i singlesystem eller multisytem der stemmer overens med en record i testing.. jeg skal have singlesystem.hours ud, som skal lægges ved siden af hver record.. hvis denne værdi ikke findes, skal recorden ikke tages med (testing indeholder testcases, singlesystem testsystemer og multisystem indeholder testsystemer, der kræver flere testsystemer.. hvis testing.[Test platform] ikke kan genkendes, er det fordi der ikke findes et testsystem (måske fordi den pågældende testcase ikke har fået tildelt testsystem endnu, eller fordi testcasen er er report))..
Avatar billede terry Ekspert
25. februar 2005 - 13:47 #24
I'm going to have to wait on this until I get home from work.
I'll take a look again later
Avatar billede Slettet bruger
25. februar 2005 - 13:49 #25
jeg har fundet ud af det. jeg prøvede bare at forklare dig, hvordan det hænger sammen, så du kan forstå koden..
Avatar billede terry Ekspert
25. februar 2005 - 18:21 #26
OK, tak og god weekend :o)

mvh
terry
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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