需要sql,这是个棘手的问题
假设我有三个亲戚 零件(零件号、零件名、颜色)零件号为p.K需要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
供应商(供应商编号,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