MySQL-使用WHERE子句将内部连接到同一个表中

MySQL-使用WHERE子句将内部连接到同一个表中,mysql,sql,select,Mysql,Sql,Select,我有一个名为活动的MySQL表,如下所示 ID integer Name text isBalanced boolean redirects tinyint 我正在尝试实现一个SELECT查询,以便获得isBalanced为false的所有行加上isBalanced为true的定义行数。在我得到这个结果之后,我需要得到一个重定向次数最少的结果 我知道有很多方法可以做到这一点,但我很难找到解决的办法。这是我知道之前得到的 SELECT campaigns.id, campaigns.

我有一个名为活动的MySQL表,如下所示

ID    integer
Name  text
isBalanced  boolean
redirects  tinyint
我正在尝试实现一个SELECT查询,以便获得
isBalanced
为false的所有行加上
isBalanced
为true的定义行数。在我得到这个结果之后,我需要得到一个重定向次数最少的结果

我知道有很多方法可以做到这一点,但我很难找到解决的办法。这是我知道之前得到的

SELECT campaigns.id, campaigns.name, campaigns.isBalanced, campaigns.redirects
FROM campaigns AS c
INNER JOIN campaigns_2 AS c2
WHERE c.isBalanced = 0
但是,我无法从c2集合中仅选择其中的一些,然后重新组合所有过滤器,以获得具有最少
重定向次数的单个过滤器


任何帮助都将不胜感激。

听起来您想要
联合所有人
,可能需要
按顺序
限制

select c.*
from campaigns c
where c.isBalanced = 0
union all
(select c.*
 from campaigns c
 where c.isBalanced = 1
 limit ??
)
order by redirects
limit 1;

“定义的数字”位于
所在的位置。

显示一些示例数据和预期结果。不清楚您需要什么。您的“定义”行数是多少?这些ID在表中吗?一些标准?另外,不要用“我想要这些行,然后我想从这些行中得到这一行”来思考。SQL是基于集合的,你需要教会自己用这些术语而不是顺序处理术语来思考。@TomH是和否,SQL也是顺序的。例如,当您从子查询中选择时,可以将其视为两步过程。此外,类似于IN或EXISTS(甚至其本身所在的位置)的内容也可以看作是一个连续的步骤。这里不需要
UNION ALL
,只要
UNION
@Stan
UNION ALL
总是比
UNION
更可取,除非您特别想承担删除重复值的开销。就是这样,@GordonLinoff。非常感谢你。