mysql限制特定列的结果数

mysql限制特定列的结果数,mysql,Mysql,我一直在处理一个复杂的查询,最近我更改了其中一列,以便有多个条目引用同一外键 是否有一种简单的方法可以使它在有一个或多个具有相同外键的条目时,返回一个true值或其他值,而不是n个单独的行 例如 我想要这个: id | Date 1 | true 2 | NULL 而不是现在发生的事情: id | Date 1 | feb 4 1 | feb 5 1 | feb 6 2 | NULL 2 | feb 5 如果没有值,我只希望日期为空 编辑 我忘记了同一个主键i

我一直在处理一个复杂的查询,最近我更改了其中一列,以便有多个条目引用同一外键

是否有一种简单的方法可以使它在有一个或多个具有相同外键的条目时,返回一个true值或其他值,而不是n个单独的行

例如

我想要这个:

id |  Date
1  |  true
2  |  NULL
而不是现在发生的事情:

id |  Date
1  |  feb 4
1  |  feb 5
1  |  feb 6
2  |  NULL
2  |  feb 5
如果没有值,我只希望日期为空

编辑 我忘记了同一个主键id 2同时具有值和空值的情况。在这种情况下,我需要能够返回Null。如果有空值,那么它应该返回空值。 编辑

我试着按功能和一组人一起玩,但无法实现我想要实现的目标

这是我的查询的简化版本,因为它已经存在,我不想把这个问题与额外的列混淆

SELECT distinct job, DATE_FORMAT( scan_date, '%M %e, %Y, %l:%i%p' ) AS Scanning
FROM Scan, job
WHERE Scan.job_job = job

我还没有测试,但请尝试一下:

SELECT DISTINCT j.job, CASE WHEN scan_date IS NULL THEN null 
                            ELSE 'true'
                       END
FROM Scan, job
WHERE Scan.job_job = job

检查是否存在任何扫描记录,而不是直接加入扫描表:

SELECT distinct job, exists(select 1 from Scan where Scan.job_job = job) AS Scanning
FROM job;

如果存在扫描记录,则返回1;如果不存在,则返回0。如果确实要使用true和NULL,可以将exists包装在If中。

要返回true或NULL,可以在select子句中使用CASE-WHEN语句。有关更多详细信息,请参阅

这里有另一个解决方案:

SELECT job, COUNT(scan_date) != 0 AS Scanning
  FROM job
  LEFT JOIN scan ON job_job = job
  GROUP BY job
SELECT j.job, IF(COUNT(s.scan_date) > 0, 'true', NULL) AS Scanning
FROM job j
LEFT JOIN Scan s
  ON j.job = s.job_job
GROUP BY j.job

因此,如果date有值,您希望返回true,如果没有值,则返回null?正确,但是也有这样的情况,如果有一个日期为null,并且为同一id定义了一个日期,那么我希望它也返回null。关于答案,请参见ID2TANKS,从我所知,这似乎只返回日期字段中的值1,一个人的值为另一个人的值为真。我继续并将其更改为字符串true,这样它现在应该可以生成所需的结果。此基本查询为我的日期字段提供了一个正确的true和NULL-正在努力查看是否可以将其正确合并到更大的查询中。最后,我使用了此字符串的一个变体来解释我的第二个情况。最后使用此选项:如果ExistsSelectSitefromscan,其中site=或site=NULL,Scan.job\u job=job.job,NULL,true作为扫描,