mysql - 在mysql中使用子查询

标签 mysql

下面的查询给出了我正在寻找的 3 个答案中的 2 个。在子查询中选择我得到 null 而不是 no

列名 isCyl 的 3 个可能值可以为空、是、否

我不确定子查询是否是最好的方法,但我不知道如何重新声明查询。

日程表有一系列列来显示任务中必须完成的任务。相关表存储任务的结果(如果已分配任务来完成)。所以我需要测试是否安排了特定任务。如果是这样,那么我需要看看任务的结果是否已经记录在相关的表中。为了简洁起见,我在这里仅显示其中一列。

SELECT s.`reckey`,  
if(s.cylinders="T",
        (select 
            if(c.areckey is not null, 
                  "yes",
                  "no"
            ) 
            from cylinders c where c.areckey = s.reckey limit 1 
        )
        ,""
) as isCyl 
from schedule s 
where s.assignmentDate between 20161015 and 20161016 
order by s.reckey

最佳答案

使用LEFT JOIN,当子表中的列不匹配时,它会返回NULL

SELECT s.reckey, IF(s.cylinders = "T",
                    IF(c.areckey IS NOT NULL, 'yes', 'no'),
                    "") AS isCyl
FROM schedule AS s
LEFT JOIN cylinders AS c ON c.areckey = s.reckey
WHERE s.assignmentDate between 20161015 and 20161016 
ORDER BY s.reckey

如果Columns中可以有多行具有相同的areckey,请将其更改为:

LEFT JOIN (select distinct areckey FROM cylinders) AS c on c.areckey = s.reckey

或在主查询中使用SELECT DISTINCT

关于mysql - 在mysql中使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40162578/

相关文章:

mysql - 需要捕获bash命令输出

php - 您能否在一个查询中更新具有最高 ID 的行?

mysql - 在我的sql上寻找一些删除空间的函数

php - 在 cakePHP 2.x 中使用虚拟字段

php - 如何通过 Unix 套接字将 PhpMyAdmin 连接到本地主机?

mysql - 如何在运行时将日期转换为毫秒?

mysql - 使用 codeigniter 更新数据库中的 tinyint

mysql - 使用带有多个循环的 mysql 在 Node.js 中查询

php - PDO FetchObject 转化为对象属性; PHP 中的面向对象编程

php - 在单个 php 上执行两个查询会导致无法获取