Ziehen von Ergebnissen aus zwei Tabellen, wenn die erste Tabelle keine Übereinstimmungen hat

Versuchen, eine gespeicherte Prozedur zu erstellen, die ich verwenden kann, um nach Personen nach Vor- und Nachnamen zu suchen. Die Fname und Lname werden zusammen in zwei verschiedenen Tabellen gespeichert, um von Table1 zu ziehen und wenn es keine Übereinstimmung gibt, dann ziehen Sie aus Table2 die Ergebnisse.

 @FName VARCHAR(20) = NULL @LName VARCHAR(20) = NULL, SELECT TB1.ID, TB1.FName, TB1.LName FROM Table1 TB1 LEFT JOIN Table2 TB2 ON TB1.ID = TB2.ID WHERE 1=1 AND COALESCE(TB1.Fname, '') LIKE '%' + REPLACE(COALESCE(@FName, TB1.Fname, ''), ' ', '%') + '%' AND COALESCE(TB1.Fname, '') LIKE '%' + REPLACE(COALESCE(@LName, TB1.Fname, ''), ' ', '%') + '%' 

Was ich bisher versucht habe, war das und es scheint, alle Aufnahmen zurückzuziehen.

 WHERE 1=1 AND COALESCE(TB1.Fname, '') LIKE '%' + REPLACE(COALESCE(@FName, TB1.Fname, ''), ' ', '%') + '%' OR COALESCE(TB2.Fname, '') LIKE '%' + REPLACE(COALESCE(@FName, TB2.Fname, ''), ' ', '%') + '%' AND COALESCE(TB1.Lname, '') LIKE '%' + REPLACE(COALESCE(@LName, TB1.Lname, ''), ' ', '%') + '%' OR COALESCE(TB2.Lname, '') LIKE '%' + REPLACE(COALESCE(@LName, TB2.Lname, ''), ' ', '%') + '%' 

Jede Hilfe oder Anleitung wäre dankbar, ich habe Google für den letzten Tag oder so, aber ich denke, ich gehe das falsche Zeug.

Sie sollten einen Full Join verwenden, um sicherzustellen, dass Sie die Ergebnisse zusammenfassen, so dass es aus welcher Tabelle die data zieht.

 SELECT Coalesce(TB1.ID, TB2.ID) As ID, Coalesce(TB1.FName, TB2.FName) As FName, Coalesce(TB1.LName,TB2.LName) As LName FROM Table1 TB1 Full JOIN Table2 TB2 ON TB1.ID = TB2.ID 

Nachdem ich mit einer Weile herumgegangen war und mich ansah, was G Mastros gepostet hat, hat ich mich darüber nachgedacht, wie ich versuchte, zwei OR statementen anzurufen, wenn ich wirklich alles war, was ich brauchte. Also habe ich die COLESCE statement ein wenig geändert und sie in einen OR COLESCE mir im Gegenzug die gewünschten Ergebnisse gab.

Ich glaube, das ist ein Werk mit der Fähigkeit, weitere Anfragen auf dem path nach Bedarf hinzuzufügen, also zum Beispiel, wenn ich auf der search nach E-Mail oder Telefonnummer suchen muss.

 DECLARE @FName VARCHAR(100) DECLARE @LName VARCHAR(100) SET @FName = 'Adam' SET @LName = NULL, SELECT TB1.ID, COALESCE(TB1.FName,TB2.FName) AS FirstName ,COALESCE(TB1.LName,TB2.LName) AS LAstName FROM Table1 TB1 INNER JOIN Table2 TB2 ON TB1.ID = TB2.ID WHERE 1=1 AND ( COALESCE(U.Unit_Owner_FName, '') LIKE '%' + COALESCE(@FName, U.Unit_Owner_FName, '') + '%' AND COALESCE(U.Unit_Owner_LName, '') LIKE '%' + COALESCE(@LName, U.Unit_Owner_LName, '') + '%' OR COALESCE(I.Insured_FName, '') LIKE '%' + COALESCE(@FName, I.Insured_FName, '') + '%' AND COALESCE(I.Insured_LName, '') LIKE '%' + COALESCE(@LName, I.Insured_LName, '') + '%' )