mysql - 在某种条件下找到每件元素和最昂贵的元素

标签 mysql sql

我有以下关系和

1.我想找到每个供应商提供的零件的pid,并且小于200。 (如果任何供应商要么不简单的部分或收取超过 200 的部分,则不选择该部分)

fiddle http://sqlfiddle.com/#!2/4b5d4

Supplies            
sid     1   2   3   4   5
sname   Jason   David   John    Peter   Jay
address 221 2b  3c  4d  5e


Parts                       
pid     10  20  30  40  50  60
pname   Head    Body    Hand    Leg Arm Foot
color   red blue    green   white   red green


Catalog             
sid     1   1   2   2   3   4   1   1   4   4   1   5   5   3   3   2
pid     10  20  20  30  30  40  30  40  10  50  50  50  10  60  10  10
cost    150 220 150 150 130 125 130 280 123 126 120 100 100 210 100 50

所以我做了以下查询 我认为这等于没有供应商不提供的零件。

SELECT C.pid
FROM CATALOG C
WHERE C.cost < 200
  AND NOT EXISTS (SELECT S.sid
                  FROM Suppliers S
                  WHERE NOT EXISTS
                  (SELECT P.pid
                   FROM Parts P
                   WHERE P.pid = C.pid
                   AND S.sid = C.sid ))

但它返回 null,它应该返回 10。

2.我想为每个提供绿色部件和红色部件的供应商找到她​​提供的最昂贵部件的名称和价格。

我只能找出绿色和红色部分,但找不到最贵的部分。

查询是我试过的

SELECT S.sname
FROM Suppliers AS S,
     Parts AS P1,
     CATALOG AS C1,
     Parts AS P2 ,
     CATALOG AS C2
WHERE S.sid = C1.sid
  AND C1.pid = P1.pid
  AND S.sid = C2.sid
  AND C2.pid = P2.pid
  AND ( P1.color = 'red'
       AND P2.color = 'green' )

我该如何解决?提前致谢。

ps抱歉,我要去上课了,我会在大约6小时后回复。

最佳答案

第一部分

从目录中选择 pid where cost<200 group by pid having count(Sid)>=(Select Count(sid) from Suppliers)

Sql Fiddle Demo

第二部分-:

  Select t.sname,Max(Catalog.cost) from (SELECT  S.sname,c2.cost,c2.sid
FROM Suppliers AS S, Parts AS P1, Catalog AS C1, Parts AS P2 , Catalog AS C2
WHERE S.sid = C1.sid
AND C1.pid = P1.pid
AND S.sid = C2.sid
AND C2.pid = P2.pid
AND (
P1.color =  'red'
AND P2.color =  'green'
) ) t inner join Catalog on t.sid =Catalog.sid
group by t.sid

Sql Fiddle Demo

关于mysql - 在某种条件下找到每件元素和最昂贵的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16455166/

相关文章:

php - Laravel - 在 Eloquent 模型中返回自定义额外数据

sql - 数据库父 -> 子 "firstborn"关系

sql - VM 快照期间 BizTalk 与 SQL 的连接问题

sql - adodb:createparameter 有什么作用?

mysql - 如何从mysql表中获取最后一个列名?

c# - 使用 pivot 将行转换为列

mysql - 联合mariadb中的n个表并根据时间戳找到不同的值

MySQL : Group count specific column per user?

MySQL:选择一个条目的 parent 和祖 parent 的名字

mysql - 如何在某些状态更改时排除增加 counter_cache?