[英]Finds related data from mysql table
这些是我的数据库的两个表结构
-- Table structure for table `gf_actor`
CREATE TABLE IF NOT EXISTS `gf_actor` (
`actor_id` bigint(20) NOT NULL auto_increment,
`actor_name` varchar(100) default NULL,
PRIMARY KEY (`actor_id`),
UNIQUE KEY `actor_name` (`actor_name`)
) ENGINE=MyISAM;
-- Table structure for table `gf_film_actor`
CREATE TABLE IF NOT EXISTS `gf_film_actor` (
`film_id` int(20) NOT NULL,
`actor_id` int(20) NOT NULL,
KEY `film_id` (`film_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
所以我需要一个查询,从 gf_actor 表中获取五个相关演员的姓名和 ID,这些演员在由 actor_id 执行的电影中扮演过角色,可以说 actor_id=1 并且电影必须不同,这意味着必须在不同的电影中扮演五个相关的演员actor_id=1
尝试这个
select ga.actor_id, actor_name from gf_actor ga inner join gf_film_actor gf on ga.actor_id = gf.actor_id where gf.film_id in (select gf1.film_id from gf_film_actor gf1 where gf1.actor_id=1) AND gf.actor_id != 1 LIMIT 5
你有错误的表结构。 它应该是这样的:
CREATE TABLE IF NOT EXISTS `gf_actor` (
`actor_id` bigint(20) NOT NULL auto_increment,
`actor_name` varchar(100) default NULL,
PRIMARY KEY (`actor_id`),
UNIQUE KEY `actor_name` (`actor_name`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `gf_film` (
`film_id` int(20) NOT NULL,
`performed_by_actor_id` bigint(20) NOT NULL,
KEY `film_id` (`film_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `gf_film_actor` (
`film_id` int(20) NOT NULL,
`actor_id` bigint(20) NOT NULL,
KEY `film_actor_id` (`film_id`, `actor_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
现在您可以像这样创建查询:
SELECT a.*
FROM `gf_film` AS f
LEFT JOIN `gf_film_actor` AS fa ON f.`film_id` = fa.`film_id`
LEFT JOIN `gf_actor` AS a ON fa.`actor_id` = a.`actor_id`
WHERE f.`performed_by_actor_id` = 1
LIMIT 0, 5;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.