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&lt;b AS cond(因为MySQL没有真正的布尔类型,将true表示为1,false表示为0)。

以上是关于MYSQL SELECT:如何获取一个额外的列,指示是不是满足 WHERE 子句中的第一个或第二个条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mySQL 查询中显示额外的列

[MySql]如何将一行从一个表复制到另一个并填充额外的列?

MYSQL:如何在 mysql 中将整行从一个表复制到另一个表,而第二个表有一个额外的列?

如何使用两个不同的列 mySQL 从查询而不是其他查询中获取数据? [复制]

SQL 编号列 - MySQL

java 获取mysql 某个数据库中所有表及表的列的信息