我正在试图确定我们组织中的计算机是否分配了某些应用程序。我遇到的问题是,左边的连接列出了重复项,列出了每个赋值,而不是理想情况下列出了计算机名,如果应用程序被分配了,则为1;如果应用程序没有被分配任何这些应用程序,则为0。我应该采取什么方法来实现这一点?
应用程序列表最多可以包含100多个应用程序,因此我需要使用IN。我无法修改任何数据库列。
http://sqlfiddle.com/#!9/a5a387/5
非常感谢您的帮助!!!
CREATE TABLE macs
(`wsid` int, `mach_name` varchar(20))
;
CREATE TABLE assignments
(`wsid` int, `adp_id` int)
;
INSERT INTO macs
(`wsid`, `mach_name`)
VALUES
(1, 'computer1'),
(2, 'computer2'),
(3, 'computer3')
;
INSERT INTO assignments
(`wsid`, `adp_id`)
VALUES
(1, '100'),
(1, '101'),
(1, '103'),
(2, '100'),
(2, '101'),
(3, '100'),
(3, '101'),
(3, '103')
;
还有问题:
select mach_name,
CASE
WHEN b.adp_id in(103) THEN 1 ELSE 0 END
from macs a
left join assignments b on a.wsid = b.wsid
最佳答案
使用exists
:
select m.*,
(case when exists (select 1 from assignments a where a.wsid = w.wsid and a.adp_id in (103)
then 1 else 0
end) as flag
from macs m;