SQL获取具有所有值的实体

SQL获取具有所有值的实体,sql,Sql,我无法计算出这个语法,但它确实有效(english:get MNAME's,它具有所有PID) 谁能告诉我为什么 为了达到相同的结果,有什么替代语法 结果:Sam 请查阅维基百科的文章“关系代数”,特别是那篇文章中的“除法”。我承认这是一种精神扭曲。就我所知所信,您提出的解决方案(不存在多个)是唯一适用于所有情况的解决方案(一个经典的关系划分问题) 奇怪的是,在另一个论坛上出现了一个与此非常相似的问题,我提出了您展示的解决方案;当我提出这个解决方案时,OP似乎不相信我 Wietze314的解决方

我无法计算出这个语法,但它确实有效(english:get MNAME's,它具有所有PID)

谁能告诉我为什么

为了达到相同的结果,有什么替代语法

结果:Sam


请查阅维基百科的文章“关系代数”,特别是那篇文章中的“除法”。我承认这是一种精神扭曲。就我所知所信,您提出的解决方案(不存在多个)是唯一适用于所有情况的解决方案(一个经典的关系划分问题)

奇怪的是,在另一个论坛上出现了一个与此非常相似的问题,我提出了您展示的解决方案;当我提出这个解决方案时,OP似乎不相信我


Wietze314的解决方案将适用于您的数据集;不一定适用于所有情况。只要Sam在表MP中有六行(并且只有六行),不管P1…P6是否全部被表示,那么该解决方案将起作用。

是的,您很难理解。在上面的示例中,我无法单独执行内部查询,也不确定原因。如果我将表名添加到其中,
来自MP,P,M
。整个问题给出了错误的答案@客人
SELECT MNAME
    FROM M
    WHERE NOT EXISTS
             ( SELECT *
               FROM P
               WHERE NOT EXISTS
                         ( SELECT *
                           FROM MP
                           WHERE MID = M.MID
                           AND PID = P.PID ) );
SELECT M.MID
FROM M
WHERE M.MID IN 
(SELECT MP.MID 
FROM MP 
GROUP BY MP.MID 
HAVING COUNT(*) = (SELECT COUNT(*) FROM P))