MySQL:查找id';在具有相同记录组的单独表中
我有两个不同的表,其中一些记录具有相同的信息子组,但都具有不同的id值。下面是一个示例,其中我有一个来自MySQL:查找id';在具有相同记录组的单独表中,mysql,Mysql,我有两个不同的表,其中一些记录具有相同的信息子组,但都具有不同的id值。下面是一个示例,其中我有一个来自movies和plays的演员表 我想查询这两个表,以便获得一对movie\u id,play\u id值,这些值具有所有相同的参与者(即具有first\u name=given\u name和last\u name=family\u name,用于具有相同id的每条记录) 要实现这一点,合适的查询是什么 TABLE: movie_actors | movie_id | first_name
movies
和plays
的演员表
我想查询这两个表,以便获得一对movie\u id
,play\u id
值,这些值具有所有相同的参与者(即具有first\u name=given\u name
和last\u name=family\u name
,用于具有相同id
的每条记录)
要实现这一点,合适的查询是什么
TABLE: movie_actors
| movie_id | first_name | last_name |
|----------+------------+-----------|
| 1 | mary | johnson |
| 1 | john | smith |
| 2 | tom | anderson |
TABLE: play_actors
| play_id | given_name | family_name |
|----------+------------+-------------|
| 23 | mary | johnson |
| 23 | john | smith |
| 31 | marc | anthony |
DESIRED OUTPUT:
| movie_id | play_id |
|----------+---------|
| 1 | 23 |
在子查询中使用GROUP\u CONCAT
,将所有参与者作为一列获取。然后在此基础上加入子查询
SELECT movie_id, play_id
FROM (SELECT movie_id, GROUP_CONCAT(CONCAT(first_name, '-', last_name) ORDER BY first_name, last_name) AS actors
FROM movie_actors
GROUP BY movie_id) AS m
JOIN (SELECT play_id, GROUP_CONCAT(CONCAT(given_name, '-', family_name) ORDER BY given_name, family_name) AS actors
FROM play_actors
GROUP BY play_id) AS p
ON m.actors = p.actors
试试这个:
SELECT DISTINCT `movie_id`, `play_id`
FROM `movie_actors`
INNER JOIN `play_actors`
ON STRCMP(`first_name`,`given_name`) = 0
AND STRCMP(`last_name`,`family_name`) = 0
请注意,first\u name
的值必须与给定的\u name
完全匹配,同样地,last\u name
和family\u name
的值也必须完全匹配
如果要限制,例如movie\u id
,只需在查询末尾添加一个where子句,指定所需的值,如:
WHERE `movie_id` = ** ID **
为什么所需的输出中没有包含2,31
?对不起,我将对其进行编辑,使2和31具有不同的值。