Avatar billede Lasse Novice
18. maj 2001 - 17:00 Der er 11 kommentarer og
2 løsninger

Difference mellem to tabeller

Jeg har to tabeller... begge med en kolonne kaldet <navn>.

Jeg vil gerne uddrive de rækker hvor <navn> ikke findes i begge tabeller. Hvordan gør man det med SQL?
Avatar billede well_r Nybegynder
18. maj 2001 - 17:06 #1
$res_1 = mysql_query(\"SELECT nick FROM TABEL1\");
$row_1 = mysql_fetch_array($res_1)

$res_2 = mysql_query(\"SELECT nick FROM TABEL2 where nick != \'$row_[nick]\' \");

while($row = mysql_fetch_array($res_2)) {

print \"$row[nick] <br>\";
}
Avatar billede well_r Nybegynder
18. maj 2001 - 17:06 #2
var det godt nok?
Avatar billede mwittrock Nybegynder
18. maj 2001 - 17:15 #3
Ren SQL burde kunne gøre det (OBS! Ikke testet):

SELECT t1.navn
FROM  tabel1 AS t1 LEFT JOIN tabel2 AS t2 ON (t1.navn = t2.navn)
WHERE  t2.navn IS NULL
UNION
SELECT t2.navn
FROM  tabel1 AS t1 RIGHT JOIN tabel2 AS t2 ON (t1.navn = t2.navn)
WHERE  t1.navn IS NULL

Hvis bare MySQL understøttede EXISTS, kunne ovenstående gøres en del pænere...
Avatar billede Lasse Novice
18. maj 2001 - 17:17 #4
ok... jeg prøver lige igen.... HVORDAN GØR MAN DET I SQL....???? ingen perl tak!
Avatar billede Lasse Novice
18. maj 2001 - 17:18 #5
mwittrock >> hvordan gøres det med mysql?
Avatar billede well_r Nybegynder
18. maj 2001 - 17:20 #6
$SQL1 = mysql_query(\"SELECT nick FROM TABEL1\");
$row_1 = mysql_fetch_array($res_1)

$SQL2 = mysql_query(\"SELECT nick FROM TABEL2 where nick != \'$row_1[nick]\' \");

Hvad fejler denne metode..hvad mener du med SQL.. der er da sql i det her?
Avatar billede Lasse Novice
18. maj 2001 - 17:29 #7
mwittrock>>  sorry, jeg mener, hvordan gøres det med excist???

well_r>> lad os sige at jeg, som det eneste, har en sql klient... intet sprog hvor jeg kan behandle dataen(det har jeg, men det er assembler), så kan jeg ikke bruge alle de fine tricks du bruger mht. at ligge det i perlvariabler...

Jeg ville bare have én sql sætning som gav mig resultatet... men jeg takker for dit svar... selvom jeg nok lød lidt gnaven!!!
Avatar billede mwittrock Nybegynder
18. maj 2001 - 17:31 #8
Hvis MySQL understøttede EXISTS (det _er_ MySQL du bruger, ikke?) kunne du skrive:

SELECT navn
FROM  tabel1 AS t1
WHERE  NOT EXISTS (SELECT * FROM tabel2 WHERE navn = t1.navn)
Avatar billede well_r Nybegynder
18. maj 2001 - 17:33 #9
så ved jeg ikke! :(
Avatar billede Lasse Novice
18. maj 2001 - 17:34 #10
jo, det er mysql jeg bruger..., men mysql unerstøttet ikke union... :-(
Avatar billede defrost Nybegynder
18. maj 2001 - 17:36 #11
select a.navn from tabel1 a left join tabel2 b on a.navn = b.navn where b.navn is null

giver alle navne i tabel1, der ikke findes i tabel 2.

select b.navn from tabel2 b left join tabel1 a on b.navn = a.navn where a.navn is null

Så du bliver nødt til at bruge 2 queries i mysql.
Avatar billede mwittrock Nybegynder
18. maj 2001 - 17:41 #12
Ah, det er sandt, ingen UNIONs... Hmm, så er der nok ingen vej udenom 2 forespørgsler, desværre.
Avatar billede Lasse Novice
18. maj 2001 - 17:46 #13
ok.... jeg tror at mwittrock må have fordelen af at få de fleste point, da han har hjulpet mig igennem mest... tak for alle svar...
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