2

これが私のスキーマです:

サプライヤー(sid:整数、sname:文字列、アドレス文字列)

Parts(pid:整数、 pname:文字列、色:文字列)

カタログ(sid:整数、pid:整数、コスト:実数)

太字は主キーを示します。

すべての部品を供給しているすべてのサプライヤーを見つけるためのクエリを作成したいと思います。これが私がすでに持っている2つのクエリです:

-- get all parts for a given supplier
SELECT Parts.pid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Suppliers.sid = 4;

-- gets all parts that exist
SELECT Parts.pid
FROM Parts

私がやりたいことは、命令型で、次のようなものです。

Define result set
Foreach Supplier:
    If the list of parts produced by a supplier 
    is equal to the total list of parts, add this supplier to the result set
Return result set

これをMySQLに変換するにはどうすればよいですか?

4

4 に答える 4

0

それがMySQLにどのように変換されるかはわかりませんが、これらの線に沿った何か:

select s.sname, PartCount from (
 select s.SID, s.sname, PartCount = sum(p.PID)
 inner join Catalog c on c.SID = s.SID
 inner join Parts p on p.PID = c.PID
 where s.SID = 4
 group by s.SID
) a
where PartCount = MAX(PartCount)

サブクエリ'a'のラベル付けは任意の名前であることに注意してください。これは、MSSQLが何らかの理由でサブクエリに名前を必要とするためです。MySQLでどのように機能するかわからない。

于 2010-02-21T04:37:18.587 に答える
0

試してみてください(テストされていません):

SELECT s.*
FROM (
  SELECT sid, count(pid) as c
  FROM Catalog
  GROUP BY sid) q1
JOIN Suppliers s ON s.sid = q1.sid
WHERE q1.c = (SELECT COUNT(*) FROM Parts)
于 2010-02-21T04:39:18.290 に答える
0

試す:

SELECT Suppliers.sid
FROM Suppliers
INNER JOIN
(SELECT sid, COUNT(pid) as num
    FROM Catalog
    GROUP BY sid)as t1
ON Suppliers.sid = t1.sid
WHERE t1.num = 
    (SELECT COUNT(pid) FROM Parts)
于 2010-02-21T04:50:13.427 に答える
0

使用する:

SELECT s.*
  FROM SUPPLIER s
  JOIN (SELECT c.sid,
               COUNT(c.pid) AS num_parts
          FROM CATALOG c
      GROUP BY c.sid) x ON x.sid = s.sid
  JOIN (SELECT COUNT(*) AS total_parts
          FROM PARTS) y ON y.total_parts = x.num_parts
于 2010-02-21T04:50:42.707 に答える