Avatar billede samsayit Nybegynder
03. januar 2005 - 14:30 Der er 6 kommentarer og
2 løsninger

SQL: Udsøg og dublér

Jeg har en tabel med eksempelindhold:

TextID, SprogID, Text
1, 1, Dreng
1, 2, Boy
1, 3, Junge
2, 1, Pige
2, 2, Girl
3, 1, By
3, 2, City
3, 3, Stadt
...

Kan jeg med SQL udsøge alle de TextID'er, hvor der f.eks. ikke findes en post med SprogID = 3 (i eksemplet ovenfor mangler TextID 2 en sådan). OG samtidig, eller med seperat SQL lave en dublat af posten med SprogID = 1 men med prefixet 'translate:' i Text.

Senere kan man jo så nemt udsøge alle poster med Text like 'translate:%'...

Håber det er til at forstå hvad jeg ønsker.
Avatar billede lorentsnv Nybegynder
03. januar 2005 - 17:11 #1
Med følgende SQL vil du få en liste over de kombinationer som ikke er defineret, og med teksten 'translate:'. I dit eksempelindhold vil du få
2, 3, translate:
som svar.

Select C.TextID, C.SprogID, 'translate:' as Text
from (
    Select Distinct A.TextID, B.SprogID
    from testtabel A, (
        Select Distinct SprogId from testtabel)
    as B)
    as C
where    NOT EXISTS
    (Select *
    from testtabel D
    where D.TextID = C.TextID
    and    D.SprogID = C.SprogID)


Mvh.
Lorents
Avatar billede arne_v Ekspert
03. januar 2005 - 20:03 #2
SELECT TextID FROM tabel WHERE TextID NOT IN
(SELECT TextID FROM tabel WHERE SprogID=3)

og

SELECT t1.TextID,3,(SELECT 'translate:' + t2.Text FROM tabel t2 WHERE t2.TextID=t1.TextID AND t2.SprogID=3) FROM tabel t1 WHERE t1.TextID NOT IN
(SELECT TextID FROM tabel WHERE SprogID=3)

ville være mine bud
Avatar billede lorentsnv Nybegynder
03. januar 2005 - 23:45 #3
Hej igen.

Jeg har justeret lidt på min første SQL, for at få med den danske tekst på 'translate:'. Den burde også være lidt mere effektiv, da der laves en distinct select både på tabel a og b.

Formålet med denne SQL er at den vil søge igennem alle kombinationer, uden at behøve specificere hvilken SprogID der skal checkes.

Nedenstånde SQL kan udvides med en INSERT INTO for at automaisk inserte manglende kombinationer i din tabel.

Select C.TextID, C.SprogID, 'translate:' + C.Text as Text
from (
    Select Distinct B.TextID, A.SprogID, B.Text
    from (Select Distinct SprogID from TestTabel) as A, (
        Select TextID, Text from TestTabel where SprogID = 1)
    as B)
    as C
where    NOT EXISTS
    (Select *
    from testtabel D
    where D.TextID = C.TextID
    and    D.SprogID = C.SprogID)
Avatar billede samsayit Nybegynder
04. januar 2005 - 09:14 #4
Tak for buddene indtil nu, jeg kigger på dem senere i dag og skal nok give feedback :)
Avatar billede samsayit Nybegynder
04. januar 2005 - 10:00 #5
Efter nogen fumlen med det kom en kollega forbi og stykkede følgende sammen, som gør arbejdet:

INSERT INTO Tabel (TextId, SprogId, Text)
(SELECT textid, 3 as Sprogid, 'translate:' + Text as text FROM Tabel WHERE TextID NOT IN
(SELECT TextID FROM Tabel WHERE SprogID=3) and Sprogid = 1)

I skal dog have points begge to, så opret lige svar.
Avatar billede arne_v Ekspert
04. januar 2005 - 10:32 #6
ok
Avatar billede lorentsnv Nybegynder
04. januar 2005 - 11:28 #7
ok
Avatar billede samsayit Nybegynder
04. januar 2005 - 12:20 #8
ok ;-)
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