【问题标题】:Getting items from one table that don't have a corresponding foreign key in another table从一个表中获取另一个表中没有对应外键的项目
【发布时间】:2021-12-16 08:25:33
【问题描述】:

您好,我正在开发一个在 ruby​​ on rails 服务器设置上使用 postgres 的 react 应用程序。

我在数据库中有两个表,电影和流派。在电影表中,有一个字段流派 id。在流派表中,它的 ID 是它如何链接到电影表的流派 ID。我正在尝试查找电影表中没有列出相应 id 的所有类型。我尝试了两种不同的方法,直接使用 SQL。

sql = "SELECT count(*) FROM genres
       LEFT JOIN movies
       ON genres.id = movies.genre_id
       WHERE genre.id = movies.genre"
        
genres_with_no_movie = ActiveRecord::Base.connection.exec_query(sql).rows[0][0]

轨道上的红宝石。

genres_with_no_movie = Genre.joins(:movies).count()

这两个都给了我连接的数量。它给了我电影确实有相应类型的地方。我正在尝试找到没有相关电影的类型。我尝试了 WHERE NOT EXISTS 代替 where 并且不起作用。

任何帮助将不胜感激。

【问题讨论】:

  • SELECT count(*) FROM id not in的流派(从电影中选择genre_id)

标签: reactjs ruby-on-rails postgresql


【解决方案1】:

LEFT JOIN 允许您从表流派中检索与电影没有对应关系的行,即movies.genre IS NULL:

SELECT count(*) 
FROM genres
LEFT JOIN movies
ON movies.genre_id = genres.id
WHERE movies.genre IS NULL

【讨论】:

    【解决方案2】:

    另一种可能更快,并且(恕我直言更直接)使用 NOT EXISTS 代替 join。

    select count(*) 
      from genres g
     where not exists 
           (select null 
              from movies m 
             where m.genre_id = g.id
           ); 
    

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2020-08-10
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多