2016-06-01 8 views
1

Ich bin mir sicher, dass der Titel der Frage geändert werden muss, aber nicht sicher, was ich von meinem Ende setzen soll.Erhalten Sie Datensätze, die nicht in Tabellen enthalten sind, wenn sie in In-Klausel übergeben werden?

Ich bin übergeben In-Klausel in zwei Tabellen wollen die Datensätze, die nicht in beiden Tabellen sind.

Tabelle A enthält ID 1,2 Tabelle B ID 3,4

enthält ich vorbei bin in meiner In-Klausel (1,2,3,4,5,6)

Suche für etwas

1 TableA 
2 TableA 
3 TableB 
4 TableB 
5 Not Found 
6 Not Found 

ich verwende Union alle Artikel aus Tabelle A und Tabelle B nicht sicher, wie man sowohl die nicht gefundenen Einträge in der Tabelle zu bekommen?

+0

Durch Ihre Probe, die das Ergebnis Sie erwartet? (5,6)? (1,2)? ...? – scaisEdge

+0

Wir sind auch nicht, wenn Sie nicht einige Details angeben. Es gibt keine Chance, dass irgendjemand anders als Pseudocode ohne wirkliche Details viel tun kann. Sie können sich diesen Artikel ansehen. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

Ich möchte alle Datensätze übergeben in In. .. und welche Tabelle sie gehört zu und Keine gefunden, wenn nicht in einer Tabelle vorhanden –

Antwort

2

Hier ist eine Methode. Es verwendet exists zu prüfen, ob die Tabellen die id enthalten:

select id, 
     (case when inA = 1 and inB = 1 then 'Both' 
      when inA = 1 then 'TableA' 
      when inB = 1 then 'TableB' 
      else 'Not Found' 
     end) as status 
from (select id, 
      (case when exists (select 1 from tableA a where a.id = ids.id then 1 else 0 end) as inA, 
      (case when exists (select 1 from tableB b where b.id = ids.id then 1 else 0 end) as inB 
     from (values (1), (2), (3), (4), (5), (6)) as ids(id) 
    ) i; 

Natürlich können Sie where inA = 0 or inB = 0 hinzufügen, wenn Sie nicht die 'Both' Reihen wollen.

0

Versuchen folgende Abfrage:

DECLARE @TableA TABLE (Col1 INT) 
INSERT @TableA VALUES (1), (2),(5) 

DECLARE @TableB TABLE (Col2 INT) 
INSERT @TableB VALUES (3), (4),(5) 

-- Query 
SELECT t.Col3, 
    CONCAT(xa.ExistsInA, ',', xb.ExistsInB) AS SourceTables 
    --STUFF(CONCAT(',' + xa.ExistsInA, ',' + xb.ExistsInB), 1, 1, '') AS SourceTables 
FROM (VALUES 
    (1), 
    (2), 
    (3), 
    (4), 
    (5), 
    (6) 
) AS t(Col3) 
OUTER APPLY (
    SELECT 'TableA' 
    WHERE EXISTS(SELECT * FROM @TableA a WHERE a.Col1 = t.Col3) 
) xa (ExistsInA) 
OUTER APPLY (
    SELECT 'TableB' 
    WHERE EXISTS(SELECT * FROM @TableB b WHERE b.Col2 = t.Col3) 
) xb (ExistsInB) 
Verwandte Themen