下面的查询给出了我正在寻找的 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/