Avatar billede nazaq Nybegynder
09. august 2001 - 12:15 Der er 10 kommentarer og
1 løsning

Kringlet SQL

Jeg har en tabel som er opbygget ud fra dette:

1=>2=>3=>4=>5=>6 (1 er 2 men 2 er ikke 1 osv.)

så i ovenstående er:

1 = 2,3,4,5,6
2 = 3,4,5,6
3 = 4,5,6
4 = 5,6
5 = 6

Min tabel ser sådan ud

Nr1|Nr2
-------
1 | 2
2 | 3
3 | 4
4 | 5
5 | 6

Nu kommer spørgsmålet så.... Kan man lave en SQL sætning der ud fra tabellen giver det ønskede resultat? Altså en søgning på 1 giver 2,3,4,5,6 og hvis man søger på 3 får man 4,5,6.

Hvis man tilføjer en post der hedder 3=>2 vil den så kunne få flg. resultat:

1 = 2,3,4,5,6
2 = 2,3,4,5,6
3 = 2,3,4,5,6
4 = 5,6
5 = 6

/NaZaq
Avatar billede cautoo Nybegynder
09. august 2001 - 12:22 #1
hmm msåke noget alla:
for i := tal to 6 do
begin
  resultat := resultat + i;
end;
Avatar billede intim Nybegynder
09. august 2001 - 12:47 #2
Her skriver den dog linerne over hinanden....

1 = 2
1 = 3
1 = 4
osv....

<%
Q = \"select * from tabel where nr1 = \"&tmp&\"\"

tmp = \"\"

do while not rs.eof
nr1 = rs(\"nr1\")
nr2 = rs(\"nr2\")

if tmp <> nr2

response.write \"1 = \"& nr2 &\" <br>\"

tmp = \"nr2\"
end if
rs.movenext
loop
%>
Avatar billede nazaq Nybegynder
09. august 2001 - 14:31 #3
Undskyld men tag jer lige sammen.
Det kunne jeg også selv have lavet, både pascal og asp, skulle det være 250 point værd !!!
Desuden løser det jo slet ikke spørgsmålet, som beder om en ren SQL løsning.

Her er lige en stump som løser opgaven men som ikke er optimal og som jeg gerne ville forbedre hvis det er muligt.

select distinct nr2 from tabel1
where nr1=1
or nr1 in (
select distinct nr2 from tabel1
where nr1=1
or nr1 in (
select distinct nr2 from tabel1
where nr1=1
or nr1 in (
select distinct nr2 from tabel1
where nr1=1
or nr1 in (
select distinct nr2 from tabel1
where nr1=1))))

/NaZaq

Avatar billede proaccess Nybegynder
10. august 2001 - 07:09 #4
Prøv at lege med denne...

SELECT N1.NR1, N2.NR1, N3.NR1, N4.NR1, N5.NR1 FROM (((NUMRE AS N1 LEFT JOIN NUMRE AS N2 ON N1.NR2 = N2.NR1) LEFT JOIN NUMRE AS N3 ON N2.NR2 = N3.NR1) LEFT JOIN NUMRE AS N4 ON N3.NR2 = N4.NR1) LEFT JOIN NUMRE AS N5 ON N4.NR2 = N5.NR1;
Avatar billede proaccess Nybegynder
10. august 2001 - 07:11 #5
Dit eksempel med at tilføje en 3=>2 post, vil dog resultere i en uendelig løkke, da 2 jo fører til 3, som fører til 2, som igen fører til 3...
Avatar billede nih Novice
11. august 2001 - 00:08 #6
Tabelen hedder tabel1
felterne hedder n1 og n2

SELECT Tabel1_5.n1, Tabel1_5.n2, Tabel1_4.n2, Tabel1_3.n2, Tabel1_2.n2, Tabel1_1.n2
FROM Tabel1 AS Tabel1_5 LEFT JOIN (Tabel1 AS Tabel1_4 LEFT JOIN ((Tabel1 AS Tabel1_3 LEFT JOIN Tabel1 AS Tabel1_2 ON Tabel1_3.n2 = Tabel1_2.n1) LEFT JOIN Tabel1 AS Tabel1_1 ON Tabel1_2.n2 = Tabel1_1.n1) ON Tabel1_4.n2 = Tabel1_3.n1) ON Tabel1_5.n2 = Tabel1_4.n1
WHERE (((Tabel1_5.n1)=1));

Lavet i Access, det svarer til hvordan man laver en \'træstruktur\' i databasedesign. Noget med node og parrentNode.

Niels
Avatar billede nih Novice
11. august 2001 - 00:10 #7
ehh - trækker mit svar tilbage. Proaccess kom vist først.
Fik ikke nærlæst din SQL - Sorry

NIELS
Avatar billede mallemab Nybegynder
14. august 2001 - 09:49 #8
Hvorfor ikke bare sige:
SELECT nr2 FROM tabel
WHERE nr2>1;

ellers vil jeg da foreslå at opbygge din tabel på følgende måde

Nr1|Nr2
-------
1 | 2
1 | 3
1 | 4
1 | 5
1 | 6
2 | 3
2 | 4
2 | 5
2 | 6
3 | 4
osv......

så er det nok at tilføje flg. for at lave 3=>2

3 | 2

så kan sql´en laves sådan:

SELECT nr2 FROM tabel
WHERE nr1=1;

ps: Jeg ved godt at tabellen bliver noget større, men hvis det ikke drejer sig om mere end 6 forskellige poster i nr1, er det ikke noget problem.

MVH
Martin


Avatar billede teepee Nybegynder
16. august 2001 - 15:23 #9
select nr2
from tabel
where nr1 >= (select nr2
              from tabel
              where nr1 = vaerdi)
/
Avatar billede proaccess Nybegynder
18. august 2001 - 07:59 #10
Har du fundet en løsning...???
Avatar billede nazaq Nybegynder
20. august 2001 - 20:23 #11
:-) Ja der er jo 250 points på højkant :-)

Jeg har endnu ikke haft tid til at gennemgå svarene 100% endnu da et haste project kom på banen, det ser dog ud til at det bliver dig (proaccess) der render med guldet.

/NaZaq
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