2013-03-06 43 views
3

我知道标题很混乱,但我最好解释它。基本上我正在为一家拥有两家影院的公司开发一个影院列表网站。所以我有一个数据库,其中有两个表格“Films”和“Listings”,其中包含两个电影院的数据。在表格中选择所有表格,其中表格1中的列存在于另一个表格中,第二列表示第二个表格中的变量

如果电影名称显示在列表中(因为两个电影院共享所有电影但是在表格中但可能没有相同的电影显示),我试图选择所有电影和它们的数据用于一个电影院

这是我想出来的,但我碰到一个问题,因为当“SELECT DISTINCT”返回多于一个结果时,它显然不能与tbl Films上的FilmName匹配。 如何检查tblFilms上所有FilmNames的值?

SELECT * 
FROM tblFilms 
WHERE FilmName = (SELECT DISTINCT FilmName FROM tblListings WHERE Cimema = 1) 

回答

12

使用IN如果子查询返回多个值,

SELECT * 
FROM tblFILMS 
WHERE FilmName IN (SELECT DISTINCT FilmName FROM tblListings WHERE Cimema = 1) 

另一种方法来解决thius是通过使用JOIN我建议

SELECT DISTINCT a.* 
FROM tblFILMS a 
     INNER JOIN tblListings b 
      ON a.FilmName = b.FilmName AND 
       b.Cimema = 1 

更快查询执行,在两张桌子上的FilmName上添加INDEX

+1

完美!谢谢!我用你的推荐选项去了。 – James 2013-03-06 16:55:42

+0

不客气':D' – 2013-03-06 16:56:04

+0

快速的问题。我不知道是否要将其设置为存储过程或视图。哪一个被认为是最佳实践?我假设我认为是对的? – James 2013-03-06 17:04:07

1

如果你有你的表的模式,这将有所帮助。

这就是说,我相信你想看的是JOIN关键字。 (内/外/左/等)。这正是JOIN所要做的(即你的标题)。

相关问题