Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要sql,这是个棘手的问题_Sql - Fatal编程技术网

需要sql,这是个棘手的问题

需要sql,这是个棘手的问题,sql,Sql,假设我有三个亲戚 零件(零件号、零件名、颜色)零件号为p.K 供应商(供应商编号,sname)供应商编号为P.K 零件供应商(供应商号,零件号)供应商号,零件号为P.K 现在我想知道只供应一种颜色零件的供应商的名称。having条款是您的FRIND select field1, etc, count(*) records from yourTables where whatever group by field1, etc having count(*) = 1 查询: SELECT S.sn

假设我有三个亲戚

零件(零件号、零件名、颜色)零件号为p.K
供应商(供应商编号,sname)供应商编号为P.K
零件供应商(供应商号,零件号)供应商号,零件号为P.K


现在我想知道只供应一种颜色零件的供应商的名称。

having条款是您的FRIND

select field1, etc, count(*) records
from yourTables
where whatever
group by field1, etc
having count(*) = 1
查询:

SELECT S.sname 
FROM part P, supplier S, part_supplier PS
WHERE S.supplierno = ps.supplierno AND
      PS.partno = P.partno
GROUP BY P.partno
HAVING count(P.color) = 1
表:

CREATE TABLE supplier (
  supplierno     INT          PRIMARY KEY,
  suppliername   VARCHAR(10)  NOT NULL
);

CREATE TABLE part (
  partno     INT          PRIMARY KEY,
  partname   VARCHAR(10)  NOT NULL,
  color   INT          NOT NULL
);

CREATE TABLE part_supplier (
  supplierno INT          NOT NULL REFERENCES supplier(supplierno),
  partno     INT          NOT NULL REFERENCES part(partno),
  PRIMARY KEY (supplierno, partno)
);
一些测试数据:

INSERT INTO part VALUES (1, 'a',1), (2, 'b',2), (3, 'c',3), 
                        (4, 'd',1), (5, 'e',2), (6, 'c',3), 
                        (7, 'd',1), (8, 'e',2), (9, 'e',3);

INSERT INTO supplier VALUES (1,'a'), (2,'b'), (3,'c');

INSERT INTO part_supplier VALUES (1,1), (2,1), (3,3), 
                                 (4,1), (5,1), (6,1), 
                                 (7,2), (8,2), (9,3);

看起来像家庭作业?为什么这么重要?@DanBracuk:作为一名学生,你至少应该试着自己做家庭作业。如果你仍然不能解决一个问题,那么你可以问。当然,你也应该知道你到目前为止已经尝试过的。这不也适用于那些试图以此为生的人吗?如果你需要这类问题的帮助,你不是在用SQL为生:-)这个问题看起来直接来自Chris Date教科书:这返回唯一的行,但这不是OP要求的:-)这返回了供应商如何只供应一个零件,但这不是OP要求的:-)虽然这篇文章可能会回答这个问题,但添加一些解释和相关文档的链接仍然是一个好主意。对当前的OP和未来的访客来说,有好的解释和参考的答案通常更有用。完整详细的答案也更有可能吸引正面的选票。
INSERT INTO part VALUES (1, 'a',1), (2, 'b',2), (3, 'c',3), 
                        (4, 'd',1), (5, 'e',2), (6, 'c',3), 
                        (7, 'd',1), (8, 'e',2), (9, 'e',3);

INSERT INTO supplier VALUES (1,'a'), (2,'b'), (3,'c');

INSERT INTO part_supplier VALUES (1,1), (2,1), (3,3), 
                                 (4,1), (5,1), (6,1), 
                                 (7,2), (8,2), (9,3);
SELECT s.supplierno
FROM supplier AS s
JOIN part_supplier AS ps
  ON s.supplierno = ps.supplierno
JOIN part AS p
  ON ps.partno = p.partno
GROUP BY s.supplierno
HAVING COUNT(DISTINCT p.color) = 1 -- only one color for all parts