Sql运算符不存在

Sql运算符不存在,sql,Sql,假设您有一组如下表: Museum(M_name,State) Artist(A_name,Country) Artwork(Id,Title,M_name*,A_name*) 我想知道加州所有没有达芬奇作品的博物馆的名字 任何关于如何做的解释都会对我有很大帮助 到目前为止,我所做的是: SELECT M_name FROM Museum,Artwork WHERE Artwork.M_name*=Museum.M_name AND State="Californi

假设您有一组如下表:

Museum(M_name,State) Artist(A_name,Country) Artwork(Id,Title,M_name*,A_name*) 我想知道加州所有没有达芬奇作品的博物馆的名字

任何关于如何做的解释都会对我有很大帮助

到目前为止,我所做的是:

SELECT M_name FROM Museum,Artwork WHERE Artwork.M_name*=Museum.M_name AND State="California" 但我坚持排除那些包含特定作者作品的博物馆。在最后一行之后,有些人提出了类似的建议:

AND A_name NOT EXIST ( SELECT A_name FROM Artwork WHERE A_name="Da-vinci")
我确实理解EXIST命令返回0/1的内容,这取决于子请求结果,但我无法想象为什么它会在这种情况下工作

您可以使用联接和非联接

select distinct m.name, m.town
from  Artwork aw
inner join Museum m on m.M_name  = aw.M__name
where aw.A_Name not in ( 'da-vinci');
或使用!=

select distinct m.name, m.town
from  Artwork aw
inner join Museum m on m.M_name  = aw.M__name
where aw.A_Name  !=  'da-vinci';
这是不存在的

  select distinct m.name, m.town
  from  Artwork aw
  inner join Museum m on m.M_name  = aw.M__name
  WHERE   NOT EXISTS
          (
          SELECT  null 
          FROM   Artwork aw
          WHERE  aw.A_Name  = ( 'da-vinci');
          )

没有达芬奇作品的博物馆

SELECT M_name
FROM Artwork
WHERE LOWER(A_Name) NOT IN ('da vinci')
你不会说如何找到博物馆所在的州。 现在我看到你的例子了

加入博物馆的桌子,进城

SELECT M_name
FROM Museum
JOIN (
  SELECT M_name
  FROM Artwork
  WHERE LOWER(A_Name) NOT IN ('da vinci')
) AS X ON X.M_name = M_name
WHERE Town='Calafornia'
上述代码应与不存在的代码相同。事实上,如果你对这两个问题都做一个解释,看起来应该是一样的


尝试此方法,它使用“不存在”选项:

SELECT DISTINCT m.name, m.town
FROM Museum m
WHERE State = 'California'
AND NOT EXISTS (SELECT * FROM Artwork aw WHERE m.M_name  = aw.M__name AND   A_name = 'Da-vinci')

实际上,您已准备好在问题中编写查询:

我想知道所有博物馆的名字 在加利福尼亚 那没有艺术品 达芬奇制造

你能告诉我们到目前为止你做了什么吗?您使用的是哪种DBMS?请回答您的问题并添加一些示例数据以及基于这些数据的预期输出。拜托,你的第一个问题是:你有城镇专栏,但没有州专栏。你怎么能确定博物馆是否在加利福尼亚?我在用MySQL我很抱歉,更正了那个错误我很抱歉,这是州属性而不是城镇Course不需要加入problem@OthoSama-你想了解它是如何工作的吗?EXISTS的工作方式与join相同。服务器将使用join对我的代码执行与包含工作存在的代码相同的操作。这就是我回答的重点。冷静点,我想在操作员不在的情况下解决这个问题,这很简单all@OthoSama-嗯。。。我的答案有一个“不在为什么你不喜欢不在?”我喜欢你的解决方案谢谢你的帮助,但我仍然需要找到一种方法来写它与不存在only@OthoSama . 回答更新无效但基于yoy likeon not exist Looks类似于我正在寻找的解决方案您知道not exists操作符在这种情况下是如何工作的吗?例如,如果加利福尼亚州只有一家博物馆有《达芬奇之谜》,则返回0?因此,在allIt检查是否在基于WHERE子句的子查询中返回行时,不会执行任何选择。在本例中,如果一个博物馆有一幅达芬奇的画,那么该博物馆将被排除在结果集中。@othosama是的,如果加利福尼亚州只有一个博物馆,而且它有一幅达芬奇的画,那么它确实将被排除在结果集中,如果加利福尼亚州只有一家博物馆有达芬奇的艺术品,那么这个不存在的结果就不会是0,那么外部请求根本不会执行?@OthoSama-它会执行它,只是不会返回任何结果什么是外部请求?notexists`从外部查询中排除行,就像WHERE m.m_state='Californa'排除非加州行一样。请注意:子查询是相关的
SELECT m.m_name                         -- I would like to get all the names
FROM museum m                           -- of museums
WHERE m.state = 'Californa'             -- in California
AND NOT EXISTS (                        -- that has no
        SELECT * FROM artwork aw        -- artwork
        WHERE aw.m_name = m.m_name         -- For THIS museum
        AND aw.a_name = 'Da-vinci'      -- made by da-vinci
        );