场景:我有2个表 - TableA和TableB。每个表都有一个列,用于存储电影标题列表。这两列未标记为相同的column_name,因此您无法将它们作为column_name加入(例如,它们标记为 - TableA.movie_titles,TableB.titles_movie - 都保存电影标题)。但是,这些表共享1个可以加入的列,它们存储了电影标题的ID,并标记为movie_id(因此,您可以将TableA.movie_id连接到TableB.movie_id上)。
我的目标是查看/返回两个仅列中显示的电影标题列表(示例,"查找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)
当我运行此查询时,TableA将显示重复的电影标题,而表B没有重复。这不是我正在寻找的。 p>
我将查询基于of this question,但我不确定我是否在我的方案中使用了正确的查询。
我应该使用某种形式的真/假声明来帮助我匹配电影片头吗?我该怎么办?
答案 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)