You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询简化求助:找出兼具导演与演员身份的人员

一、简化“既是导演又是演员”的查询语句

假设你的数据结构是分表存储(比如movie_actors存演员信息,movie_directors存导演信息,两表共享person_id/person_name这类人员标识字段),以下几种简化方案供你选择:

方案1:用INTERSECT(MySQL 8.0+支持)

这是最直观的写法,直接取两个结果集的交集:

SELECT person_id, person_name FROM movie_actors
INTERSECT
SELECT person_id, person_name FROM movie_directors;

方案2:用IN子查询(兼容低版本MySQL)

如果你的MySQL版本不支持INTERSECT,子查询写法足够简洁:

SELECT person_id, person_name
FROM movie_actors
WHERE person_id IN (SELECT person_id FROM movie_directors);

方案3:用内连接关联查询

适合需要同时关联更多字段的场景,记得加DISTINCT避免重复结果:

SELECT DISTINCT a.person_id, a.person_name
FROM movie_actors a
JOIN movie_directors d ON a.person_id = d.person_id;
二、CSV导入时将空白单元格转为NULL

不用再靠CHAR_LENGTH过滤,直接在导入环节或后续批量修正处理:

1. 导入时用LOAD DATA INFILE直接转换

通过用户变量接收CSV值,再用NULLIF函数把空白转NULL:

LOAD DATA INFILE '/path/to/your/movies.csv'
INTO TABLE movies
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS  -- 跳过表头行
(col1, col2, @director, @actor, col5)
SET director = NULLIF(TRIM(@director), ''),
    actor = NULLIF(TRIM(@actor), '');

TRIM是为了处理CSV里的空白(比如多个空格),确保所有无意义的空白都能转为NULL。

2. 已导入数据的批量修正

如果已经把空白字符串导入数据库了,执行批量更新即可:

UPDATE movies
SET director = NULL WHERE TRIM(director) = '';

UPDATE movies
SET actor = NULL WHERE TRIM(actor) = '';

3. 预处理CSV文件(Excel/OpenOffice)

导入前在Excel里批量处理:选中空白单元格,直接替换为NULL;或者用公式=IF(A1="", "NULL", A1)生成新值后复制回原列,再导出CSV。

内容的提问来源于stack exchange,提问作者jordan_butler_33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:09:53