Sql 如何在不等于条件下增加价值

Sql 如何在不等于条件下增加价值,sql,sql-server,Sql,Sql Server,我在设备ID列中有一个表test 我的问题是 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, O

我在设备ID列中有一个表test

我的问题是

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
选择s.group\u id,
s、 组名称,
da.deviceid,
da.digitaladdress,
检察官地位,
dt.digitaladdressdesc,
dt.address_启用
来自OACT_TBL_设备d,
OMM_TBL_账户组g,
OMM_TBL_集团,
OACT_TBL_DIGITAL_地址da,
OACT\u TBL\u数字地址\u dt类型,
测试t
其中s.group_id='1'
s.group\u id=g.group\u id
和g.accountid=d.accountid
d.deviceid=da.deviceid
和d.deviceid t.deviceid
和s.GROUP_NAME=t.GroupName
和da.digitaladdresstype=dt.digitaladdresstype
我知道这个查询是不对的,但我的主要问题是我在test表中的deviceid必须排除这个查询中的所有deviceid。。 那么,我们可以在“”条件中放置多个值吗? 或者通过任何其他方法将带有test表的所有设备ID值从该查询输出中排除。 请帮帮我。
提前感谢。

与SQL中的许多内容一样,有很多方法可以做到这一点-使用空检查的
左外部联接
不在
语句中,或者
不存在

哪种方法最有效取决于具体情况和用户-以下是NOT EXISTS(不存在)选项的示例:

AND NOT EXISTS (SELECT NULL
                FROM   test
                WHERE  test.DeviceID = d.DeviceID)
没有选择的原因:

AND d.deviceid NOT IN (SELECT DeviceID 
                       FROM Test)
试试这个-

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
    )

你的建议真的帮了我很大的忙,我想出了解决问题的办法。
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
    )