Jump to content

Per SELECT Spalten vergleichen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Zusammen!

 

Hab da so'n problem mit ner select anweisung:

 

und zwar habe ich eine datenbank mit zwei adresslisten (tabellen): eine "LIVE" adresstabelle und eine zum rumspielen. nun hat einer unserer user in der falschen tabelle adressen markiert die per mail angeschrieben werden sollen. nun möchte ich mir in der "live" tabelle alle adressen anzeigen lassen die davon betroffen wären. dies geht ja wohl so, daß ich einfach die spalte in der die firmenbezeichnung steht, aus beiden tabellen vergleiche und nur die anzeigen lassen die übereinstimmen. Allerdings sollten dabei 1500 datensätze angezeigt werden und nicht nur 700. Das Problem warum nur 700 DS angezeigt werden ist, daß SQL die komplette Spalte miteinander vergleicht und die Firmenbezeichnungen sich ab und zu unterscheiden.

 

Nun möchte ich SQL sagen, daß er beispielsweise nur die ersten 10 Zeichen der Spalte vergleicht und nicht alle. Allerdings weiss ich echt nicht wie. Bisher bin ich so vorgegangen:

 

SELECT *

FROM ADDRESSES INNER JOIN x_adressen on

addresses.firma = x_adressen.firma1

Link zu diesem Kommentar
Original geschrieben von phoenixcp

Probier es mal damit:


Select a.Firmenname, b.Firmenname from [Tabelle1] a, [Tabelle2] b
Where Left(a.Firmenname, 10) = Left(b.Firmenname, 10)
[/Code]

 

Das könnte gehen, wenn ich mich nicht täusche. Ist jetzt aus der kalten gecodet, hab grade kein ISQLW in der Nähe um das mal an ner DB auszutesten.

 

Gruss

Carsten [/b]

 

perfekt! funktioniert. kannste mir jetzt auch nochmal kurz erklären was da passiert und wie ich die spalte "extra" in der LIVE tabelle update? also alle die übereinstimmen sollen in der spalte "extra" eine 1 bekommen....

Link zu diesem Kommentar

Was da passiert:

 

Left(Spalte, n) liest die linken n Zeichen der Spalte aus.

 

Das Update könnte mit folgender Konstruktion gehen:


UPDATE Live.Extra set "1"
Where Left(Live.Firmenname, 10) = Left(Spieltabelle.Firmenname, 10)
go
[/Code]

 

Teste es aber sicherheitshalber erstmal, da ich das hier aus der kalten Code und nix zum testen habe.

 

 

Gruss

Carsten

Link zu diesem Kommentar
Original geschrieben von phoenixcp

Was da passiert:

 

Left(Spalte, n) liest die linken n Zeichen der Spalte aus.

 

Das Update könnte mit folgender Konstruktion gehen:


UPDATE Live.Extra set "1"
Where Left(Live.Firmenname, 10) = Left(Spieltabelle.Firmenname, 10)
go
[/Code]

 

Teste es aber sicherheitshalber erstmal, da ich das hier aus der kalten Code und nix zum testen habe.

 

 

Gruss

Carsten [/b]

 

da krieg ich immer diesen fehler:

 

the column prefix 'spieltabelle' does not match with a table name or alias name used in the query...

Link zu diesem Kommentar
Original geschrieben von phoenixcp

War nur ne Sicherheitsfrage. :)

 

Mal schauen, vielleicht komm ich später nochmal zum testen.

 

Probieren kannst du auch das hier nochmal:


Update a.Extra Set "1"
Where a.ID (oder wie auch immer das bei dir heisst)
in(
Select a.ID from Live a, Spieltabelle b
Where Left(a.Firmenname,10) = Left(b.Firmenname, 10)
)
go
[/Code]

[/b]

 

was meinste denn mit id???

Link zu diesem Kommentar
Original geschrieben von phoenixcp

Und? Ich zieh den ja auch nur aus der Livetabelle und vergleiche dann die jeweiligen Firmennamen und nicht den Primärschlüssel

 

 

achso... versteh ich aber trotzdem nicht. kannste mir vielleicht nochmal erklären was da genau passiert? was heisst denn zum beispiel "in"?

 

die anweisung hat übrigens funktioniert....

Link zu diesem Kommentar

Schön das die funktioniert hat. Bin ich doch noch nicht so eingerostet wie ich dachte. :)

 

Das mit dem


Select bla from blub where ID_Blub in
(Select ID_Blub from BlaBlub)
[/Code]

 

ist ein sogenannter Subselect.

 

Auf gut deutsch und dein Problem bezogen:

 

Ich ändere für alle Einträge in Live die Spalte "Extra" auf 1, für die erfüllt ist, das deren ID in dem Resultset den Subselect's vorkommt.

 

Gruss und guten Morgen

 

Carsten

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...