我有一个表测试,其中有一个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值。 请帮我 。 提前谢谢。
答案 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
)