2016-11-26 3 views
-1

Wie kann ich überprüfen, die Existenz von bomItem Feld Wert in drei verschiedenen Tabelle vor dem Einfügen des Datensatzes in die Tabelle. Ich möchte überprüfen, obwie kann die Existenz von Datensatz in mehreren Tabelle überprüfen

1. `bomitem` of `BOMHEAD` Table with `itemId` of `Table A` 
     or 
    2. `bomitem` of `BOMHEAD` Table with `itemId` of `Table B` 
     or 
    3. `bomitem` of `BOMHEAD` Table with `itemId` of `Table C` 

gleich sind, wenn in einer der drei Tabellen seine gute existieren einen Datensatz in BOMHEAD Tabelle zu erstellen. Das einzige gemeinsame Feld in den obigen drei Tabellen ist das Feld itemId, das sehr unterschiedliche Attribute enthält.

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[BOMHEAD](
    [bomItem] [int] NOT NULL, 
    [bomRev] [nvarchar](6) NOT NULL, 

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

GO 

Beispieldaten

Table A 
100199 
100200 
100201 

Table B. 
200199 
200200 
200201 
200202 

table C 
400199 
400200 
400201 

Jetzt möchte ich, dass ich zu BOMHEAD

INSERT INTO BOMHEAD (bomItem) VALUES (400199); //OK since exist in Table C 
INSERT INTO BOMHEAD (bomItem) VALUES (200202); //OK since exist in Table B 
INSERT INTO BOMHEAD (bomItem) VALUES (500202); //NO because doesnt exist in either A or B or C tables 
+0

Was ist die Quelle? Aus welcher Tabelle ziehen Sie die Datensätze und fügen sie in 'BOMHEAD' ein. –

+0

Tabelle A oder B oder C. Um einen Datensatz in die Tabelle "BOMHEAD" einzufügen, muss ein passender Datensatz entweder in Tabelle A oder Tabelle B oder Tabelle C (nur relativ zum Feld bomItem) vorhanden sein. – afri

+0

Was passiert, wenn alle drei Tabellen "bomitem" haben –

Antwort

1

Verwenden aufnehmen möchten hinzufügen EXISTS die Existenz von Datensätzen in den Tabellen zu überprüfen. Hier ist ein Weg,

INSERT INTO BOMHEAD(bomItem) 
SELECT bomItem 
FROM (VALUES (400199), 
       (200202), 
       (200202))tc(bomItem) 
WHERE EXISTS (SELECT 1 FROM TableA A WHERE tc.bomItem = A.itemId) 
     OR EXISTS (SELECT 1 FROM TableB B WHERE tc.bomItem = B.itemId) 
     OR EXISTS (SELECT 1 FROM TableC C WHERE tc.bomItem = C.itemId) 

Ein anderer Ansatz (möglicherweise nicht so effizient sein wie oben Abfrage. Führen Sie es mit Ihren realen Daten, die Leistung zu überprüfen).

INSERT INTO BOMHEAD 
      (bomItem) 
SELECT bomItem 
FROM (VALUES (400199), 
       (200202), 
       (200202))tc(bomItem) 
WHERE EXISTS (SELECT 1 
       FROM (SELECT itemId FROM TableA A 
         UNION ALL 
         SELECT itemId FROM TableB B 
         UNION ALL 
         SELECT itemId FROM TableC C) a 
       WHERE a.itemId = tc.bomItem) 
+0

Danke! Wie kann ich es als Constrain oder mit create table-Anweisung eher mit bestimmten Datensätzen hinzufügen ?. – afri

+0

@afri - Sie können dies nicht als Einschränkung behandeln. Entweder benötigen Sie einen Trigger oder beim Einlegen stellen Sie sicher, dass Sie die obige Überprüfung durchführen. –

+0

Vielen Dank. Wenn Sie einen Hinweis darauf geben können, wie Sie dies als Auslöser umsetzen können, ist das großartig. – afri

Verwandte Themen