从结果中排除 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 中子查询结果中的内容的主要内容,如果未能解决你的问题,请参考以下文章