问一个SQL怎么写的问题

哎码 发布于 2016/06/15 14:46
阅读 242
收藏 0

现在已知一个列表,['aaa','bbb','ccc']

假设里面存放的是姓名字段,然后查用户表,要求查找到用户表里面没有的姓名。

现在我能想到的SQL是这样写的

select t.name from (
select 'aaa' as name
UNION
select 'bbb' as name
UNION
select 'ccc' as name
) as t
where t.name not in (select name from user)

这样会不会效率太低啊?因为我这几个union都是mybatis遍历出来的,太多的话会不会很慢?

有没有什么更好的写法?

加载中
1
bronze
bronze
SELECT t.name
FROM (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(a.str,',',b.help_topic_id+1),',',-1) name
FROM 
(
SELECT 'aaa,bbb,ccc' AS str) a
JOIN
mysql.help_topic b ON b.help_topic_id < (LENGTH(a.str) - LENGTH(
REPLACE(a.str,',',''))+1)) AS t
WHERE t.name NOT IN (
SELECT name
FROM USER);



bronze
bronze
回复 @哎码 : 恩,自己建一个也成,那个自带的就500左右的长度。
哎码
哎码
研究了一下你这个SQL,我理解是用mysql.help_topic表中的Id做索引,来分割参数数组,做成一张'临时表'对吧?但是我这个参数数据量可能会很大,导致这张表不够用。是不是需要我自己创建一张主键自增表呢?
0
张亦俊
张亦俊
可以用except来算差集么?
返回顶部
顶部