我正在试图确定我们组织中的计算机是否分配了某些应用程序。我遇到的问题是,左边的连接列出了重复项,列出了每个赋值,而不是理想情况下列出了计算机名,如果应用程序被分配了,则为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;

09-27 10:40