2016-05-03 15 views
2

Ich bin hier ein wenig still. Ich habe eine einfache linke äußere Verbindung zu einer Tabelle, die eine ID zurückgibt.Case Sensitive Join TSQL

Mein Code ist wie

Select distinct TenantID 
,Name 
,Name2 
,TenantNumber 
,Cashname 
From Tenants 
LEFT OUTER JOIN tCash 
on TenantNumber = CashNumber 
and tMoney.CashName = Tenants.Name2 

Mein Ergebnismenge ist wie folgt:

**TenantID | Name  | Name2   | TenantNo | CashName** 

100  |MyShop  | John's shop | 12345 |John's shop 

999  |MyShop  | John's Shop | 12345 |John's shop 

Mein Problem: für alle Absichten und Zwecke, "Johns-Shop" unterscheidet sich von „John Laden "- Ich schließe mich korrekt meinem Geld-Tabelle auf der TenantNo und dann auf Name2, aber Name 2 unterscheidet sich durch Case.

Frage: Gibt es eine Möglichkeit, eine Verknüpfung anhand der Groß- und Kleinschreibung zu unterscheiden? Ich möchte nicht UPPER oder LOWER aufgrund der Tatsache verwenden, dass es den Fall bei der Berichterstattung ruinieren würde.

Danke!

Wenn Sie die Tabelleninformationen unten hinzufügen, nehmen Sie bitte an, dass alle Spalten Leerzeichen enthalten.

Tmoney

CashNumnbr | CashName 
102504  Bill's Place  

102374  Tom's Shop  

12345  John's Shop 

12345  John's shop 

Mieter

TenantID | Name  | Name2   |TenantNumber 

    1   |MyShop | John's Shop  | 12345 

    2   |MyShop | John's shop  | 12345 

    3   |Shoppee | Bill's Place | 102504   

    4   | Shop2 | Toms Shop  | 102374   

Da ich die richtige TenantID bekommen für einen AR-Bericht anschließen möchten, würde ich möchte sicherstellen, dass ich immer in der richtigen Mieter bringen werde. Wenn der Fall anders ist, kann ich etwas schreiben, um eine Situation wie John's Shop zu unterscheiden?

+0

Versuchen Sie, das führende und nachfolgende Leerraum zu trimmen oder die Länge/Datenlänge beider Werte zu bestätigen. – dfundako

+0

Ich trimme sowohl Name2 als auch die TenantNumber. Es werden immer noch 2 Zeilen erzeugt, wie oben gezeigt. – Geo

+1

Bitte geben Sie Daten von beiden tCash und Tenants – dfundako

Antwort

7

Das Problem ist, dass in der zweiten Reihe der Ergebnisse "Johns S Hop" nicht abgestimmt hat "John s hop"?

Sie können eine Sortierung nach Groß-/Kleinschreibung verwenden.

Dies wird wahrscheinlich am besten erreicht, indem Sie die Sortierung der beteiligten Spalten ändern, um den Index zu verwenden, aber Sie können dies auch zur Laufzeit mit einer expliziten COLLATE-Klausel wie unten tun.

SELECT DISTINCT TenantID, 
       Name, 
       Name2, 
       TenantNumber, 
       Cashname 
FROM Tenants 
     LEFT OUTER JOIN tCash 
     ON TenantNumber = CashNumber 
      AND tMoney.CashName = Tenants.Name2 COLLATE Latin1_General_100_CS_AS 

Die Kommentare über auf id Beitritt sind anstelle des Namens obwohl wahrscheinlich richtig und würde die Notwendigkeit verneinen dies überhaupt zu tun.

+0

Das ist interessant. Ich war mir gar nicht bewusst, dass bei String-Vergleichen zwischen Groß- und Kleinschreibung unterschieden wurde. – CathalMF

+0

@CathalMF - Es hängt von der Kollatierung ab, aber wenn Sie die Standardeinstellungen bei der Installation akzeptieren und niemals Datenbank- oder Spaltensortierungen explizit festlegen, endet die Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung. –