MYSQL SELECT:如何获取一个额外的列,指示是不是满足 WHERE 子句中的第一个或第二个条件?
Posted
技术标签:
【中文标题】MYSQL SELECT:如何获取一个额外的列,指示是不是满足 WHERE 子句中的第一个或第二个条件?【英文标题】:MYSQL SELECT: How to get an additional column that indicates whether the first or the second condition in a WHERE clause was met?MYSQL SELECT:如何获取一个额外的列,指示是否满足 WHERE 子句中的第一个或第二个条件? 【发布时间】:2018-03-13 19:08:42 【问题描述】:如何将布尔列添加到带有 WHERE
子句的 SELECT
语句以及与 OR
组合的条件中,如果满足第一个条件则为 1,如果满足第二个而不是第一个条件则为 0遇到了吗?
以下表格t
的整数列为例:
+----+---+---+
| id | a | b |
+----+---+---+
| 1 | 2 | 3 |
| 2 | 3 | 2 |
| 3 | 5 | 2 |
+----+---+---+
当我执行 SELECT * FROM t WHERE a<b OR b+1=a;
语句时,我得到:
+----+---+---+
| id | a | b |
+----+---+---+
| 1 | 2 | 3 |
| 2 | 3 | 2 |
+----+---+---+
我想要的是一个额外的列,比如cond
,比如
+----+---+---+------+
| id | a | b | cond |
+----+---+---+------+
| 1 | 2 | 3 | 1 |
| 2 | 3 | 2 | 0 |
+----+---+---+------+
这在 mysql 中如何实现?
【问题讨论】:
为什么你不能在你的应用程序代码中做出这个决定? @eggyal 我认为这也可以通过某种方式完成,但是 1. 它可能要慢得多(php)和 2. 从最终输出中确定这一点并不容易,因为在我真正的问题中,条件涉及另一个表和 WHERE EXISTS 语句。 【参考方案1】:您可以在 select 子句中使用 case 语句来做到这一点。
SELECT id, a, b,
CASE WHEN a<b THEN 1
WHEN b+1=a THEN 0
END x
FROM t WHERE a<b OR b+1=a
【讨论】:
我认为这更神秘。CASE
中缺少“else”子句。但经过一番思考,我意识到该行不会被选中,所以NULL
不会显示。【参考方案2】:
应该这样做
SELECT id, a, b, IF(a<b, 1,0) as cond
FROM t
WHERE a<b OR b+1=a;
【讨论】:
你甚至可以做SELECT id, a, b, a<b AS cond
(因为MySQL没有真正的布尔类型,将true表示为1,false表示为0)。以上是关于MYSQL SELECT:如何获取一个额外的列,指示是不是满足 WHERE 子句中的第一个或第二个条件?的主要内容,如果未能解决你的问题,请参考以下文章
[MySql]如何将一行从一个表复制到另一个并填充额外的列?
MYSQL:如何在 mysql 中将整行从一个表复制到另一个表,而第二个表有一个额外的列?