繁体   English   中英

如何在联接另一个表时搜索表中的所有列?

[英]How to search all columns in a table while joining another table?

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));

当然,Step Brothers是一个电影标题,因此我希望它弹出,以显示Step Brothers存在的电影的所有列。 或者,如果他们搜索了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)但是我要从每个表中选择所有列,所以它们应该是相同数量的列,对吗?

您可以尝试以下一种方法:

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
)

如果搜索字符串匹配演员姓名,电影标题或电影流派,它将显示合并结果中的行。

您不能说“在所有列中搜索”-您需要指定要在其中搜索的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM