查找供应每个零件的供应商编号



我有以下表格:

Suppliers(Sno, Sname, Address)
Parts(Pno, Pname, Colour)
Catalogue(Sno, Pno, Price)

我想找到供应每个零件的供应商的Sno。

到目前为止,我已经写了这个:

SELECT s.sname
FROM suppliers s JOIN catalogue c
USING s.sno

现在我该如何写"供应每个零件的供应商"?

我正在考虑为每个供应商 Sno 提供零件 = 计数(pno) 的计数(*)。有人可以给我一个提示/写下平等的第一部分吗?

谢谢!

SELECT s.sname
    FROM suppliers s 
        INNER JOIN catalogue c
            ON s.Sno = c.Sno
    GROUP BY s.sname
    HAVING COUNT(c.Pno) = (SELECT COUNT(Pno) FROM Parts)

你很接近。您需要添加一个带有子查询的 group by/having 子句:

 group by s.sname having count(*) = (select count(*) from catalogue)

在我的头顶上,你可以写

SELECT  s.Sno
  FROM  suppliers s
  WHERE NOT EXISTS (
     SELECT  p.Pno
       FROM  parts p
       WHERE NOT EXISTS (
         SELECT  c.*
           FROM  catalogue c
           WHERE c.Pno = P.Pno
             AND c.Sno = S.Sno
         )
     )

即不存在的供应商(我们不提供的部分),用于避免计数的解决方案。不知道这是否比计数更有效或更差。

SELECT s.Sno, s.Sname
FROM Suppliers s
  CROSS JOIN Parts p
  LEFT JOIN Catalogue c ON s.Sno = c.Sno AND p.Pno = c.Pno
GROUP BY s.Sno, s.Sname
HAVING COUNT(*) = COUNT(c.Pno)

试试这个:

alter proc clr
@c char(10),
@pno int output
as
    begin
        declare @f int
        if exists(select p# from p where colour=@c)
            begin
                select @pno=p# from p where colour=@c
                --set @f=1
            end
    --  else
    --      set @f=0
      --    return @f
end

--clr 'red',2
select p# from p where colour='red'

alter proc prcs
@c char(20)
as
    begin
        declare @pno numeric(2)
        declare @f int
        exec @f=clr @c,@pno output
        --if @f=1
        --  begin
                select @pno
                select s# from sp where p#=@pno
                --set @i=1
        --  end
            --set @i=0
    --return @i
end
prcs 'red'
select * from sp
select * from p,sp where p.p#=sp.p# and colour='red'

alter proc prcj  
@c char(10)
as
    begin
        declare @i int
        exec @i=prcs @c
        if @i=1
            begin
                print'list of supplier'
                select sname from s
                where s#=@c
        end
        else
            print'this record is not found'
    end

最新更新