2017-03-09 60 views
0
mysql> describe Movies; 
+-------------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-------------+--------------+------+-----+---------+-------+ 
| MOVIE_ID | char(5)  | NO | PRI |   |  | 
| TITLE  | varchar(100) | NO |  | NULL |  | 
| RATING  | varchar(3) | YES |  | NULL |  | 
| GENRE  | varchar(15) | YES |  | NULL |  | 
| RELEASEDATE | char(4)  | YES |  | NULL |  | 
| ACTOR_ID | char(5)  | NO | MUL | NULL |  | 
| ACTOR_ID_2 | char(5)  | YES | MUL | NULL |  | 
| ACTOR_ID_3 | char(5)  | YES | MUL | NULL |  | 
+-------------+--------------+------+-----+---------+-------+ 


mysql> describe Actors; 
+----------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+----------+-------------+------+-----+---------+-------+ 
| ACTOR_ID | char(5)  | NO | PRI |   |  | 
| FNAME | varchar(40) | NO |  | NULL |  | 
| LNAME | varchar(40) | NO |  | NULL |  | 
+----------+-------------+------+-----+---------+-------+ 

首先,我知道我应该做了我的表不同,它是 不是很好的做法,actorId来,actorid2,actorid3,但是这是一个 组项目我的工作,和我一直无法更改 表。所以我试图让它工作。在查询:如何在加入另一个表时搜索表中的所有列?

select * from Movies join Actors on Actors.ACTOR_ID in (Movies.ACTOR_ID, Movies.ACTOR_ID_2, Movies.ACTOR_ID_3); 

我参加所有的演员到电影,所以我知道哪名演员 的名字都在其中电影。我想要有一个搜索功能,用户可以搜索任何电影,流派或演员,并获取所有的 信息。所以我希望它弹出将 其中非亲兄弟电影存在的所有列

select * from Movies where 'Step Brothers' in (select * from Movies join Actors on Actors.ACTOR_ID in (Movies.ACTOR_ID, Movies.ACTOR_ID_2, Movies.ACTOR_ID_3)); 

亲兄弟当然是电影的标题:所以我做了这个查询。或者,如果他们搜索Will Ferrell的 (他是Step Brothers中的演员),那么Will Ferrell的明星将会弹出所有电影 。我该怎么做呢?当我执行

select * from Movies where 'Step Brothers' in (select * from Movies join Actors on Actors.ACTOR_ID in (Movies.ACTOR_ID, Movies.ACTOR_ID_2, Movies.ACTOR_ID_3)); 

我得到一个Operand should contain 1 column(s)但我从每个表中选择所有 列,以便他们应该列的相同数量, 吧?

+0

'这是不好的做法有actorId来,actorid2,actorid3,'...你的直觉是正确的,你的桌子没有规范化,因此很难使用,除非你只打算包括三部电影,甚至不包括其他演员。 –

+0

有没有办法让这张桌子工作?因为我打算修复它,但我希望将这个搜索功能实现到我的程序中进行测试。 – XXIV

+0

是否要在两个表的所有列中搜索用户输入?你期望什么结果? –

回答

0

你可以试试这个:

select m.*, a.* 
from Movies m 
join Actors a on a.ACTOR_ID in (m.ACTOR_ID, m.ACTOR_ID_2, m.ACTOR_ID_3) 
where 'your search string' in (
    concat(a.FNAME, ' ', a.LNAME), 
    m.TITLE, 
    m.GENRE 
) 

它会告诉你从加入结果中的行,如果搜索字符串匹配的演员名字,电影标题或电影流派。

你不能说“中的所有列搜索” - 你需要指定要在搜索栏

+0

完美的作品!并且感谢你做'concat'我不知道该怎么做,并且需要它来做另一个查询。 – XXIV

相关问题