初学者级别 - PostgresSQL:我有2个表,我试图返回一个具有匹配名称的列表

时间:2017-07-10 02:31:23

标签: sql postgresql

场景:我有2个表 - TableA和TableB。每个表都有一个列,用于存储电影标题列表。这两列未标记为相同的column_name,因此您无法将它们作为column_name加入(例如,它们标记为 - TableA.movi​​e_titles,TableB.titles_movie - 都保存电影标题)。但是,这些表共享1个可以加入的列,它们存储了电影标题的ID,并标记为movie_id(因此,您可以将TableA.movi​​e_id连接到TableB.movi​​e_id上​​)。

我的目标是查看/返回两个列中显示的电影标题列表(示例,"查找Nemo"列在TableA.movi​​e_title中和TableB.title_movie)。我假设我需要加入这两个表,以便我可以创建这个列表。我也受到限制,因为我只能在他们共享的1列上加入每个表,标记为movie_id。

我有:

 SELECT TableA.movie_titles, TableB.titles_movie
 FROM TableA 
 JOIN TableB ON TableA.movie_id = TableB.movie_id 
 WHERE EXISTS(SELECT TableA.movie_titles, TableB.titles_movie 
         FROM TableB 
         WHERE TableA.movie_id = TableB.movie_id
         AND TableB.titles_movie <> TableA.movie_title)

当我运行此查询时,TableA将显示重复的电影标题,而表B没有重复。这不是我正在寻找的。

我将查询基于of this question,但我不确定我是否在我的方案中使用了正确的查询。

我应该使用某种形式的真/假声明来帮助我匹配电影片头吗?我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以使用这样的简单查询:

SELECT TableA.movie_titles, TableB.titles_movie
FROM TableA 
JOIN TableB ON TableB.titles_movie = TableA.movie_title

这将显示两个表格中出现的所有电影。这使用完全匹配,因此电影的标题在两个表中必须相同,包括空格,字符和大小写。

如果要忽略套管,可以使用LOWER()功能:

SELECT TableA.movie_titles, TableB.titles_movie
FROM TableA 
JOIN TableB ON LOWER(TableB.titles_movie) = LOWER(TableA.movie_title)

但是除非索引是使用LOWER()构建的,否则此查询不会在这两列上使用任何现有索引。

答案 1 :(得分:0)

我认为你可以使用以下代码给出结果:

select TableA.Movie_titles from tableA
where TableA.Movie_titles in (select distinct TableB.titles_movie from tableB)