MySQL:选择问题

Posted

技术标签:

【中文标题】MySQL:选择问题【英文标题】:MySQL: Select problems 【发布时间】:2015-02-03 11:46:32 【问题描述】:

有两张桌子:

wes - contains 8000 rows, with 2000 distinct masternames (mastername is a column in wes)
wem - contains 2100 rows, with 2100 distinct names (name is a column in wem)

我正在尝试获取 wem 中存在的名称,但不是 wes 中的 masternames:

SELECT name FROM wem WHERE name NOT IN (SELECT DISTINCT mastername FROM wes)

但由于某种原因,我的查询没有返回任何行,即使 wem 中有大约 100 个名称在 wes 中不作为 masternames 存在。

对出了什么问题有任何想法吗?

谢谢!

【问题讨论】:

两个表中的列类型是什么? 列的排序规则是什么? 你的sql语句似乎是正确的。我认为您应该再次检查名称是否真的不在 wes 表中并且确实在 wem 表中提交。可能会发生一些事情,比如您向我们插入了新记录,没有提交,并且在不同的会话中您尝试了 SELECT 语句。 【参考方案1】:

您确定子选择中没有 NULLS 吗?

试试SELECT mastername FROM wes WHERE mastername IS NULL

如果有,您的查询将返回 0 rwows。

调整为:

SELECT NAME FROM wem
WHERE NAME NOT IN (SELECT mastername FROM wes WHERE mastername IS NOT NULL)

【讨论】:

不错。不知道。【参考方案2】:

我通常避免在这种情况下使用NOT IN;试试下面的查询:

SELECT NAME
FROM   wem a
WHERE  NOT EXISTS(SELECT 1
                  FROM   wes b
                  WHERE  a.name = b.mastername) 

【讨论】:

以上是关于MySQL:选择问题的主要内容,如果未能解决你的问题,请参考以下文章

Day874.MySQL索引选择出错问题 -MySQL实战

Day874.MySQL索引选择出错问题 -MySQL实战

简单的mysql选择问题

选择的MySQL查询问题[关闭]

通过选择命令创建表的Mysql集群复制问题

MySQL选择特定列