如何把更多的价值放在不等于条件的地方

时间:2013-08-12 09:29:09

标签: sql sql-server

我有一个表测试,其中有一个deviceid列。

我的查询就是这个

SELECT s.group_id,
       s.group_name,
       da.deviceid,
       da.digitaladdress,
       da.status,
       dt.digitaladdressdesc,
       dt.address_enable
FROM   OACT_TBL_DEVICES d,
       OMM_TBL_ACCOUNT_GROUPS g,
       OMM_TBL_GROUPS s,
       OACT_TBL_DIGITAL_ADDRESSES da,
       OACT_TBL_DIGITAL_ADDRESS_TYPE dt,
       test t
WHERE  s.group_id = '1'
       AND s.group_id = g.group_id
       AND g.accountid = d.accountid
       AND d.deviceid = da.deviceid
       AND d.deviceid <> t.DeviceId
       AND s.GROUP_NAME = t.GroupName
       AND da.digitaladdresstype = dt.digitaladdresstype

我知道这个查询不对,但我的主要问题是我在测试表中的deviceid我必须在此查询中排除所有这些deviceid。 那么我们可以在'&lt;&gt;'中加入多个值条件? 或者以其他任何方式从此查询输出中使用 test 表排除我的所有deviceid值。 请帮我 。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

与SQL中的许多内容一样,有很多方法可以执行此操作 - LEFT OUTER JOIN具有NULL检查,NOT IN语句或NOT EXISTS

最好的是情境和用户相关 - 这是NOT EXISTS选项的一个例子:

AND NOT EXISTS (SELECT NULL
                FROM   test
                WHERE  test.DeviceID = d.DeviceID)

NOT IN选择:

AND d.deviceid NOT IN (SELECT DeviceID 
                       FROM Test)

答案 1 :(得分:0)

AND D.deviceid NOT IN( SELECT deviceid from test)

答案 2 :(得分:0)

试试这个 -

SELECT
      s.group_id
    , s.group_name
    , da.deviceid
    , da.digitaladdress
    , da.[status]
    , dt.digitaladdressdesc
    , dt.address_enable
FROM dbo.OACT_TBL_DEVICES d
JOIN dbo.OMM_TBL_ACCOUNT_GROUPS g ON g.accountid = d.accountid
JOIN dbo.OMM_TBL_GROUPS s ON s.group_id = g.group_id
JOIN dbo.OACT_TBL_DIGITAL_ADDRESSES da ON d.deviceid = da.deviceid
JOIN dbo.OACT_TBL_DIGITAL_ADDRESS_TYPE dt ON da.digitaladdresstype = dt.digitaladdresstype
WHERE s.group_id = '1'
    AND NOT EXISTS (
        SELECT 1
        FROM dbo.test t
        WHERE t.deviceid = d.deviceid
    )