Jeg gætter på at du vil finde de strenge i tabel_1 som ikke forekommer i tabel_2 eller som forekommer mere end én gang. Hvis det er det, så prøv denne forespørgsel:
SELECT * FROM tabel_1 WHERE (SELECT COUNT(*) FROM tabel_2 WHERE tabel_1.str_string = tabel_2.str_string) <> 1
Sorry, det var mig der ikke havde valgt den rigtige database...
Men jeg tror at det tager for langtid... Hvad kan jeg gøre for at få den til at køre hurtigere.... Lave et index på den, eller? Vi skal jo huske på at det er 120000 med 200000 entrys der skal snakke sammen her....
SELECT * FROM testtable WHERE (SELECT COUNT(*) FROM testtable_w1 WHERE testtable.str_string = testtable_w1.str_string) <> 1
Jeg kan næsten regne ud at den checker på om der er nogle der ikke er ens, men hvad nu (eller hvordan) hvis den også skal vise alle den der er i testtable som der IKKE er i testtable_w1?
Jamen, det var også meningen at den skulle det. Den (bør) tage alle rækker i testtable, som _ikke_ forekommer præcis én gang i testtable_w1. Dvs dem der er der mere end én gang og dem der ikke er der. Sagt på en anden måde: for hver række i testtable tæller den matchende rækker i testtable_w1 og hvis der er alt andet end ét match kommer der noget ud.
Mht index vil jeg gætte på at et index på str_string i testtable_w1 (og måske testtable) vil hjælpe. Men prøv dig frem.
Enten vokser opgaven eller også har jeg ikke forstået den endnu. Har tekstens nummer også betydning? Er det feltet 'id', som er nummeret? Kan du ikke lave et lille eksempel med tabelindhold og ønsket resultat?
Hvis strengene skal passe sammen på id kan det hele så ikke ordnes med:
SELECT * FROM testtable LEFT JOIN testtable_w1 ON testtable.id = testtable_w1.id WHERE testtable_w1.str_string IS NULL OR testtable.str_string <> testtable_w1.str_string
> Hvis der er noget nyt i testtable i forhold til testtable_w1 skal de vises
Her går jeg ud fra at det er nye strenge, uden hensyn til deres id:
SELECT * FROM testtable WHERE NOT EXISTS ( SELECT * FROM testtable_w1 WHERE testtable.str_string = testtable_w1.str_string )
> Hvis den samme findes mere end 1 gang i testtable skal den vises
Jeg går ud fra at du mener at den samme streng findes flere gange i testtable, uden hensyn til id og uden hensyn til hvad der er i testtable_w1. Her får du de strenge, som findes flere gange i testtable:
SELECT str_string FROM testtable GROUP BY str_string HAVING COUNT(*) > 1
> Hvis linie 3 i testtable findes i testtable_w1 men har et andet id end i testtable_w1 skal den vises
Her får du alle de par hvor strengene matcher mellem tabellerne, men med forskellige id'er:
SELECT * FROM testtable INNER JOIN testtable_w1 ON testtable.str_string = testtable_w1.str_string WHERE testtable.id <> testtable_w1.id
> Hvis der er nogle der findes i testtable_w1 som IKKE findes i testtable skal de vises...
Lige det omvendte af den første:
SELECT * FROM testtable_w1 WHERE NOT EXISTS ( SELECT * FROM testtable WHERE testtable.str_string = testtable_w1.str_string )
Er det sådan noget du er ude efter?
Synes godt om
Ny brugerNybegynder
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.