SQL, ta tabell1 minus tabell2? (sqlite)

Permalänk
Medlem

SQL, ta tabell1 minus tabell2? (sqlite)

Det jag vill göra är att ta vissa kolumner i tabell1, de rader jag vill ha är de där tabell1.id inte finns i kolumnen id i tabell1.

Så i icke fungerande query: "SELECT kolumn1, komolumn3 FROM tabell1, tabell2 WHERE tabell1.id != tabell2.id" detta returnerar dock de rader med id som bara finns i tabell1 och inte tabell tv dock fås samma rad lika många gånger som antalet rader i tabell två (tror jag, en himla massa identiska rader är det iaf)

kan nämnas att tabell1 innehåller alla id tabell2 innehåller och många till.

Dvs: hur ska detta göras egentligen?

Visa signatur

Citera om du vill ha svar.

Permalänk
Medlem
Skrivet av muppens:

Det jag vill göra är att ta vissa kolumner i tabell1, de rader jag vill ha är de där tabell1.id inte finns i kolumnen id i tabell1.

Så i icke fungerande query: "SELECT kolumn1, komolumn3 FROM tabell1, tabell2 WHERE tabell1.id != tabell2.id" detta returnerar dock de rader med id som bara finns i tabell1 och inte tabell tv dock fås samma rad lika många gånger som antalet rader i tabell två (tror jag, en himla massa identiska rader är det iaf)

kan nämnas att tabell1 innehåller alla id tabell2 innehåller och många till.

Dvs: hur ska detta göras egentligen?

Har inte möjlighet att testa just nu men
SELECT kolumn1, kolumn3 FROM tabell1 WHERE id NOT IN (SELECT id FROM tabell2)
borde fungera.

Här är lite andra förslag på konstruktioner att bygga på annars
(SELECT * FROM tabell1) EXCEPT (SELECT * FROM tabell2)
SELECT * FROM tabell1 WHERE NOT EXISTS(SELECT * FROM tabell2)

Permalänk
Medlem

har lite svårt att tolka vad du vill göra, då jag tror att du kanske halkat på lite tangenter här och där. jag gör dock ett försök ändå!

om jag tolkat dig rätt, så vill du ha alla rader från tabell1 där id inte finns med i tabell2.
det borde man kunna få fram med en LEFT OUTER JOIN enligt följande (med reservation för syntax, då jag brukar nyttja MS-SQL):

SELECT DISTINCT t1.* FROM tabell1 AS t1 LEFT OUTER JOIN tabell2 AS t2 ON t2.id = t1.id WHERE t2.id IS NULL

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av Cooljmb:

Har inte möjlighet att testa just nu men
SELECT kolumn1, kolumn3 FROM tabell1 WHERE id NOT IN (SELECT id FROM tabell2)
borde fungera.

Fungerar utmärkt

Skrivet av jovnas:

har lite svårt att tolka vad du vill göra, då jag tror att du kanske halkat på lite tangenter här och där. jag gör dock ett försök ändå!

om jag tolkat dig rätt, så vill du ha alla rader från tabell1 där id inte finns med i tabell2.
det borde man kunna få fram med en LEFT OUTER JOIN enligt följande (med reservation för syntax, då jag brukar nyttja MS-SQL):

SELECT DISTINCT t1.* FROM tabell1 AS t1 LEFT OUTER JOIN tabell2 AS t2 ON t2.id = t1.id WHERE t2.id IS NULL

fungerar också utmärkt

Tack båda två för snabba svar, lyckade lösningsförslag och att ni faktiskt förstod vad jag menade.

Visa signatur

Citera om du vill ha svar.