2017-03-09 58 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

相關問題