我有两张桌子 - 产品表显示员工和他们被允许出售的产品。 Inv表包含发票编号以及员工姓名和产品。 每个有资格查看的员工必须连接到该发票。 我想比较这两个表,以找出缺少合格员工的inv行。 我从下面的比较查询中得到的结果是可以的,除了它不包括prod 11和employee b的发票104。 正确的答案应该是
101 c 11
102 d 12
104 b 11
104 c 11
提前感谢您的帮助/
create table #prod
(
nameID int
, name nvarchar(255)
, prod nvarchar(255)
)
insert into #prod (nameID, name, prod)
values(1, 'a', 11)
insert into #prod (nameID, name, prod)
values(2, 'b', 11 )
insert into #prod (nameID, name, prod)
values(3, 'c', 11)
insert into #prod (nameID, name, prod)
values(2, 'b', 12)
insert into #prod (nameID, name, prod)
values(4, 'd', 12)
insert into #prod (nameID, name, prod)
values(3, 'c', 13)
insert into #prod (nameID, name, prod)
values(4, 'd', 13)
create table #inv
(
inv_id int
, name nvarchar(255)
, prod nvarchar(255)
)
insert into #inv (inv_id, name, prod)
values(101, 'a', 11)
insert into #inv (inv_id, name, prod)
values(101, 'b', 11 )
insert into #inv (inv_id, name, prod)
values(102, 'b', 12)
insert into #inv (inv_id, name, prod)
values(102, 'c', 12)
insert into #inv (inv_id, name, prod)
values(103, 'c', 13)
insert into #inv (inv_id, name, prod)
values(104, 'a', 11)
答案 0 :(得分:1)
SELECT DISTINCT
i.inv_id, p.name, p.prod
FROM #inv i
JOIN #prod p
ON p.prod = i.prod
LEFT JOIN #inv v
ON v.inv_id = i.inv_id AND
v.name = p.name AND
v.prod = p.prod
WHERE v.inv_id IS NULL;
答案 1 :(得分:0)
select distinct cs.*
from
(
select inv.inv_id, prod.[name], prod.prod
from #inv inv , #prod prod
where
inv.name <> prod.name and
inv.prod = prod.prod
) cs
left join
(
select inv.inv_id, inv.name, inv.prod
from #inv inv,#prod prod
where
inv.name = prod.name and
inv.prod = prod.prod
) b on cs.inv_id = b.inv_id and cs.name = b.name and cs.prod = b.prod
where
b.inv_id is null
order by
1,2,3
答案 2 :(得分:0)
如果您在一张桌子上有类似外键的东西,也许这样的事可以帮到你。
SELECT ID, Name
FROM table1
WHERE ID NOT IN (SELECT fID FROM table2)