2016-09-07 47 views
-2

考虑以下模式:SQL:选择/忽略表的基础上,记录在一个阵列

CREATE TABLE Test 
    (`id` int, `TestName` varchar(7), `description` varchar(55)); 

INSERT INTO Test 
    (`id`, `TestName`, `description`) 
VALUES 
    (1, 'Test1', 'Td1'),(2, 'Test2', 'Td2'),(3, 'Test3', 'Td2'); 

CREATE TABLE Forcedata 
    (`id` int, `ForceData` varchar(7), `description` varchar(55)); 

INSERT INTO Forcedata 
    (`id`, `ForceData`, `description`) 
VALUES 
    (1, 'F1', 'Fd1'), (2, 'F2', 'Fd2'), (3, 'F3', 'Fd3'); 

CREATE TABLE Temp 
    (`id` int, `TempName` varchar(7), `description` varchar(55)); 

INSERT INTO Temp 
    (`id`, `TempName`, `description`) 
VALUES 
    (1, 'Tm1', 'Tmd1'),(2, 'Tm2', 'Tmd2'); 

    CREATE TABLE Sensor 
    (`id` int, `SensorName` varchar(7), `description` varchar(55)); 

INSERT INTO Sensor 
    (`id`, `SensorName`, `description`) 
VALUES 
    (1, 'S1', 'Sd1'),(2, 'S2', 'Sd2'); 

我想写的SELECT语句会从表中一个数组,这个数据中提到的值不应该在另一个阵列的任何表格中。我想要做这样的事情:

DECLARE @ListToCheck VARCHAR(MAX) 
SET @ListToCheck = 'Test' + ', ' + 'Forcedata'; 

DECLARE @TablesToavoid VARCHAR(MAX) 
SET @TableToAvoid = 'Temp' + ', ' + 'Sensor'; 


SELECT id FROM 
tables in ('[email protected]+')' 
And WHERE id should NOT be IN ('[email protected]+')' 

因此,对于上述模式,只应选择id为3的记录。在此先感谢:)

+0

我可以知道为什么2张反对票? – zzai

回答

0

试试这个,

的MySQL:

SELECT t.id 
    FROM (
     SELECT ID 
     FROM Test 

     UNION 

     SELECT ID 
     FROM Forcedata 
     ) T 
    LEFT JOIN (
     SELECT ID 
     FROM TEMP 

     UNION 

     SELECT ID 
     FROM Sensor 
     ) T1 ON T.id = T1.id 
    WHERE t1.id IS NULL 

SQL服务器:

SELECT ID 
FROM Test 

UNION 

SELECT ID 
FROM Forcedata 

EXCEPT 

(
    SELECT ID 
    FROM TEMP 

    UNION 

    SELECT ID 
    FROM Sensor 
    ) 
+0

我知道这是我们如何做到这一点。问题是我们如何使用数组来做到这一点。不过谢谢你 – zzai