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

初级-PostgresSQL:我有两个表,我试图返回一个具有匹配名称的列表,sql,postgresql,Sql,Postgresql,场景:我有两个表-表A和表B。每个表都有一列存储电影标题列表。这两列未标记为相同的列名称,因此您不能将它们作为列名称合并。例如,它们标记为-TableA.movie\u titles,TableB.titles\u movie-两者都包含电影标题。但是,这些表共享一个列,您可以在该列中加入该列,该列存储电影标题的id,并标记为movie\u id,因此有一个TableA.movie\u id,您可以加入TableB.movie\u id 我的目标是查看/返回出现在这两列中的电影标题列表。例如,F

场景:我有两个表-表A和表B。每个表都有一列存储电影标题列表。这两列未标记为相同的列名称,因此您不能将它们作为列名称合并。例如,它们标记为-TableA.movie\u titles,TableB.titles\u movie-两者都包含电影标题。但是,这些表共享一个列,您可以在该列中加入该列,该列存储电影标题的id,并标记为movie\u id,因此有一个TableA.movie\u id,您可以加入TableB.movie\u id

我的目标是查看/返回出现在这两列中的电影标题列表。例如,Finding Nemo同时出现在TableA.movie_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)
当我运行此查询时,表A将显示重复的电影标题,而表B没有重复的电影标题。这不是我要找的

我基于我的查询,但我不确定是否对我的场景使用了正确的查询


我应该使用某种形式的真/假陈述来帮助我匹配电影标题吗?我应该在这里做什么?

您可以使用以下简单查询:

SELECT TableA.movie_titles, TableB.titles_movie
FROM TableA 
JOIN TableB ON TableB.titles_movie = TableA.movie_title
这将给出两个表中出现的所有电影。这使用精确匹配,因此电影的标题在两个表中必须相同,包括空格、字符和大小写

如果要忽略外壳,可以使用下部功能:

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

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

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

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