Discussion:
"stink-einfaches" SQL-Statement
(zu alt für eine Antwort)
Lars Breiter
2006-01-20 11:00:02 UTC
Permalink
Hallo NG,
ein kleines Problem mit einem Statement. Und zwar möchte ich mir von einer
Tabelle alle Datensätze anzeigen lassen, die NICHT in der anderen vorhanden
sind. Gleich vorweg: Beide Tabellen sind identisch im Aufbau, nur die Daten
sind eben anders. Ich hab mir das ganz einfach vorgestellt, etwa so:

\\
select * from Whitelist
where Gutscheinnr NOT IN (Select Gutscheinnr FROM Whitelist_1427)
//

Doch der SQL-Server (2000) bringt mir folgende Fehlermeldung:
\\
Server: Nachr.-Nr. 446, Schweregrad 16, Status 9, Zeile 1
Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst
werden.
//

Kann mir da jemand weiterhelfen?

Gruß
Lars Breiter

PS: in 'GutscheinNr' stehen war nur (meistens) 8-stellige Zahlen, die Spalte
ist jedoch als varchar(50) deklariert. Nicht darüber aufregen, ich hab die
Datenbank nicht entworfen.
Hannes Brunner
2006-01-20 11:11:16 UTC
Permalink
Hallo Lars,
Post by Lars Breiter
Hallo NG,
ein kleines Problem mit einem Statement. Und zwar möchte ich mir von einer
Tabelle alle Datensätze anzeigen lassen, die NICHT in der anderen vorhanden
sind. Gleich vorweg: Beide Tabellen sind identisch im Aufbau, nur die Daten
\\
select * from Whitelist
where Gutscheinnr NOT IN (Select Gutscheinnr FROM Whitelist_1427)
//
\\
Server: Nachr.-Nr. 446, Schweregrad 16, Status 9, Zeile 1
Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst
werden.
//
Die Tabellen sind nur auf den ersten Blick identisch. Offensichtlich
sind die Gutscheinnr-Felder mit einer unterschiedlichen
Sortierreihenfolge (collation) erstellt worden. Das kannst du im
Enterprise-Manager einfach nachprüfen in dem du dir die Eigenschaft
'Kollation' unter 'Tabelle bearbeiten' anguckst. Oder du läßt dir
jeweils ein Tabellenerstellungs-Script erzeugen.
Post by Lars Breiter
Kann mir da jemand weiterhelfen?
Wenn du die Tabellen nicht anfassen darfst kannst du auch eine Collation
erzwingen. Häng einfach an den Feldname die gewünschte Kollation an,
also z.B. Gutscheinnr COLLATE Latin1_General_CI_AS

Gruß
Hannes
Jürgen Volke
2006-01-20 11:12:41 UTC
Permalink
Hallo Lars
Post by Lars Breiter
ein kleines Problem mit einem Statement. Und zwar möchte ich mir von
einer Tabelle alle Datensätze anzeigen lassen, die NICHT in der
anderen vorhanden sind. Gleich vorweg: Beide Tabellen sind identisch
im Aufbau, nur die Daten sind eben anders. Ich hab mir das ganz
\\
select * from Whitelist
where Gutscheinnr NOT IN (Select Gutscheinnr FROM Whitelist_1427)
//
\\
Server: Nachr.-Nr. 446, Schweregrad 16, Status 9, Zeile 1
Konflikt der Sortierung für die equal to-Operation kann nicht
aufgelöst werden.
//
Kann mir da jemand weiterhelfen?
vielleicht klappt ja:

select * from Whitelist W left outer Join Whitelist_1427 W1
on W.GutscheinNr = W1.Gutscheinnr
Where W1.Gutscheinnr IS NULL

HTH Jürgen
news.microsoft.com
2006-01-20 11:29:07 UTC
Permalink
Also soooo gleich können die Tabellen ja nicht sein ;-)

Punkt 1) Ich würde NOT IN vermeinden. Man kann besser - glaube ich - SELECT
* FROM WhiteList w LEFT OUTER JOIN WhiteList_1427 wa ON
w.GutscheinNr=wa.GutscheinNr WHERE wa.GutscheinNr is NULL Schreiben Punkt 2)
Man kann die Sortierung angeben

SELECT * FROM WhiteList COLLATE SQL_Latin1_General_CP1_CS_AS (oder
gewünschte - da diese ja wohl offensictlich andes ist...)

Hope helps

Ruprecht Dröge
Post by Lars Breiter
Hallo NG,
ein kleines Problem mit einem Statement. Und zwar möchte ich mir von einer
Tabelle alle Datensätze anzeigen lassen, die NICHT in der anderen vorhanden
sind. Gleich vorweg: Beide Tabellen sind identisch im Aufbau, nur die Daten
\\
select * from Whitelist
where Gutscheinnr NOT IN (Select Gutscheinnr FROM Whitelist_1427)
//
\\
Server: Nachr.-Nr. 446, Schweregrad 16, Status 9, Zeile 1
Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst
werden.
//
Kann mir da jemand weiterhelfen?
Gruß
Lars Breiter
PS: in 'GutscheinNr' stehen war nur (meistens) 8-stellige Zahlen, die Spalte
ist jedoch als varchar(50) deklariert. Nicht darüber aufregen, ich hab die
Datenbank nicht entworfen.
Lars Breiter
2006-01-20 11:41:03 UTC
Permalink
Hallo Hannes,
danke für den Tip mit der Sortierreihenfolge. Hat geklappt. Allerdings nicht
das Statement mit 'COLLATE', sondern habe die Tabellen in eine andere DB
kopiert und dann bei beiden die Sortierreihenfolge 'DB-Standard' gesetzt.
Jetzt geht's. Danke nochmal

@Jürgen: Nee, leider nicht. Es blieb auch bei einem JOIN die gleiche
Fehlermeldung. Aber danke nochmals für's Bemühen

Gruß
Lars Beiter
Post by Lars Breiter
Hallo NG,
ein kleines Problem mit einem Statement. Und zwar möchte ich mir von einer
Tabelle alle Datensätze anzeigen lassen, die NICHT in der anderen vorhanden
sind. Gleich vorweg: Beide Tabellen sind identisch im Aufbau, nur die Daten
\\
select * from Whitelist
where Gutscheinnr NOT IN (Select Gutscheinnr FROM Whitelist_1427)
//
\\
Server: Nachr.-Nr. 446, Schweregrad 16, Status 9, Zeile 1
Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst
werden.
//
Kann mir da jemand weiterhelfen?
Gruß
Lars Breiter
PS: in 'GutscheinNr' stehen war nur (meistens) 8-stellige Zahlen, die Spalte
ist jedoch als varchar(50) deklariert. Nicht darüber aufregen, ich hab die
Datenbank nicht entworfen.
Christa Kurschat
2006-01-20 11:59:23 UTC
Permalink
Hallo Lars,
Post by Lars Breiter
Hallo Hannes,
danke für den Tip mit der Sortierreihenfolge. Hat geklappt.
Allerdings nicht das Statement mit 'COLLATE', sondern habe die
Tabellen in eine andere DB kopiert und dann bei beiden die
Sortierreihenfolge 'DB-Standard' gesetzt. Jetzt geht's. Danke
nochmal
wahrscheinlich lag es hier an der Tempdb.
Der subselect wird dort ausgeführt. und deshalb wich die Collation ab.

Gruß
Christa
--
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
auch interessant: http://www.insidesql.de
Suchen in den Newsgroups:
http://groups.google.de/advanced_group_search?hl=de&lr=&ie=UTF-8
Dave
2006-01-20 12:30:00 UTC
Permalink
Post by Lars Breiter
select * from Whitelist
where Gutscheinnr NOT IN (Select Gutscheinnr FROM Whitelist_1427)
vielleicht
\\
SELECT * FROM Whitelist l
LEFT JOIN Whitelist_1427 k
ON l.Gutscheinnr = k.Gutscheinnr
WHERE k.Gutscheinnr IS NULL
//
Grüße, David

Loading...