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