从结果中排除 mysql 中子查询结果中的内容

Posted

技术标签:

【中文标题】从结果中排除 mysql 中子查询结果中的内容【英文标题】:excluding from result something that is in a subquery result in mysql 【发布时间】:2012-08-02 18:39:58 【问题描述】:

是否可以在子查询的结果中不显示某些内容。

示例: table1:有 4 个数字,1,2,3,4。 所以 select * from table1 显示 4 个结果

是否可以制作:

    select * from table1 where not exists(select * from table1 where num = 3)

所以结果将是 1,2,4。基本上从结果中删除子查询结果中的内容。

我知道存在对此不起作用,因为它只给出真假,但还有其他方法吗?

谢谢大家。

【问题讨论】:

在这个例子中,select * from table1 where num <> 3 可以解决问题。 @Matt,但答案是:有可能 ;) @arnoudhgz 是的,但是“是”的答案太短了,不能离开。 :-) @vexen 如果要比较不同表中的值,您将需要JOIN。 This chart 非常清楚地传达了这个概念。 @Matt 我知道我需要一个 JOIN 语句来进行更复杂的查询,它只是在我的真实查询中我试图排除某些人并且仅在某些情况下。接下来是真正的查询 =) 现在正在工作...... SELECT distinct id,nombre, apellido1,apellido2, personas.seccion from personas LEFT JOIN votaciones on personas.id = votaciones.id_persona WHERE personas.seccion = 1 AND mesa = 'A' AND (id_eleccion IS NULL OR id NOT IN (SELECT id FROM personas JOIN votaciones ON personas.id = votaciones.id_persona WHERE id_eleccion =1)) 【参考方案1】:

select * from table1 where num <> 3;?

select * from table1 where id NOT IN (select id from table2 where num = 3);

详细阐述你想要的。

【讨论】:

谢谢,我想我在子查询中用 select * 试过了,这就是为什么它不起作用。 是的,谢谢你,它按计划完美运行,只是愚蠢的我不知道 mysql 太了解自己想它=)【参考方案2】:

您可以使用NOT IN,但子查询必须只返回一列(我认为存在同样的事情)。像这样:

SELECT * FROM table WHERE column1 NOT IN (SELECT column1 FROM table WHERE column2 = 3)

【讨论】:

NOT IN 导致比不存在语句更慢的查询! 谢谢,当我尝试在子查询中使用 selec * from 时,这就是问题,谢谢解释我只需要使用 1 列。 不客气 :) 你没有说你遇到了错误 ;) 我认为不存在的情况下不可能排除某些东西,因为存在不会导致列它给出真或假,如果我没有弄错的话。 我没有错误,它只是给了我 0 列或没有排除它。

以上是关于从结果中排除 mysql 中子查询结果中的内容的主要内容,如果未能解决你的问题,请参考以下文章

Mysql5.7中子查询时order by与group by合用无效的解决办法

Day459.子查询 -mysql

如何从第三个查询中排除值(访问)

使用 INNER JOIN 排除 MYSQL 查询结果

求助啊,tp下,mongodb如何查询后只返回某个字段值

从 bitbucket 查询结果中排除已删除的评论