Join Rückgabewert, aber Wert wird in beiden Tabellen gefunden. Ist meine Syntax schlecht?Links äußerer Join gibt Ergebnisse in beiden Tabellen zurück
select distinct source.[Manufacturer]
from Products2.dbo.sourceexport source
left join Products2.dbo.uniqueprods u
on source.[Manufacturer]=u.mfg
where u.mfg is null;
select [Manufacturer] from Products2.dbo.sourceexport where [Manufacturer]='XYZ';
select mfg from Products2.dbo.uniqueprods where mfg='XYZ'
Die select/Join-Anweisung gibt etwa 20 Zeilen, Die erste Reihe ist ‚XYZ‘, obwohl es auch von Format ‚XYZ‘ für einige der Zeilen sein könnte. Wenn ich das Ergebnis (mit/ohne Padding, mit/ohne ltrim(rtrim(u.mfg))
auf alle meine Felder) in die zweite und dritte where-Anweisung kopiere, erhalte ich 15 bzw. 260 Ergebnisse.
Alle Ergebnisse von einem linken äußeren Join sollten 0 Zeilen für die rechte Tabelle zurückgeben, und 260 ist mehr als die 0, die ich erwartet hatte.
Edit: Mir wurde in früheren Fragen gesagt, dass ich zu ausführlich bin. Anscheinend hier bin ich nicht ausführlich genug. Vielen Dank. Ich möchte eine linke äußere Verbindung. Bedeutung, ich möchte die Hersteller in source
, die nicht in u
vorhanden sind. Wir könnten alle Felder aller Zeilen zurückgeben, wenn dies Ihnen hilft, die Frage besser zu beantworten, und dann könnte ich einen zweiten Schritt erstellen, um einen bestimmten Hersteller aus diesen Ergebnissen auszuwählen.
Ich habe ein paar Millionen Datensätze, die Informationen enthalten, die mein Klient als empfindlich betrachtet. Es wäre nicht angemessen, auf die Industrie des Herstellers dieser Widgets anzuspielen. Es ist auch für niemanden besonders interessant, außer für meinen Klienten.
I Tabelle habe source
mit Werten (a, b, c, d, f, h, j, l), und Tabelle u
mit Werten (a, c, e, g, g, i, k, l) . Ich möchte Werte zurückgeben (b, d, f, h, j). Ich bekomme Rückgabewerte, die ein aber nicht c in ihnen haben. Ich weiß nicht, ob es alle enthält (b, d, f, h, j), weil ich nicht sicher bin, dass meine Aussage funktioniert.
Um die Frage anders zu stellen: Wie kann ich einen linken äußeren Join schreiben, wo keine der Ergebnisse der Anweisung in der richtigen Tabelle sind?
Edit2: Aus den folgenden Aussagen scheint die Syntax nicht schlecht zu sein. Die Änderung meiner ersten Bearbeitungsfrage ist ungültig. Zurück zur ursprünglichen Frageanweisung, warum gibt mein linker äußerer Join Werte zurück, die in beiden Tabellen gefunden werden?
Abgesehen von nicht sichtbaren Zeichen (die durch ltrim (rtim()), richtig?) Und dem Feldtyp gelöst werden sollten, welche anderen Faktoren könnten zu einer Fehlfunktion der Verbindung führen?
Beispieltabellendaten, aktuelles Ergebnis und erwartetes Ergebnis hinzufügen! – jarlh
Obwohl Ihre Frage nicht sehr klar war, wollen Sie auch Zeilen, die in sourceexport vorhanden sind, aber nicht in uniqueproducts? Außerdem haben Sie eine eindeutige Klausel in Ihrer Join-Abfrage, aber nicht in Ihrer zweiten und dritten where-Anweisung. Das könnte eine andere Anzahl von Zeilen ergeben. Rest als @jarlh erwähnt, bitte fügen Sie weitere Informationen hinzu. –
@AkankshaSingh Danke. Dies ist meine erste SQL-Frage. VBA zum Beispiel verlangt, dass es viel weniger Informationen gibt, und ich schrieb so, wie ich es für dieses Publikum gewohnt war. Und ja, es gibt eine eindeutige Klausel. Zeilenzählungen sind irrelevant, aber für eine Sache: Der einzige Grund, warum ich Zeilenzählungen einbezogen habe, war, weil alle Ergebnisse der ersten Anweisung, so dachte ich, für die dritte Anweisung 0 Zeilen zurückgeben sollten. Alles außer 0 ist unerwünscht.Ich hätte wahrscheinlich nur sagen sollen, dass die Zeilenanzahl nicht null ist. – CWilson