【问题标题】:list all left for all dates and ids nulls SQL列出所有日期和 id 的所有剩余空值 SQL
【发布时间】:2020-10-12 21:18:16
【问题描述】:

您好,我想查询的问题有问题 这些表格是:

CREATE TABLE `lista` (
  `job` varchar(20) NOT NULL,
  `tipo` varchar(20) NOT NULL,
  `nombre` varchar(256) NOT NULL,
  PRIMARY KEY (`job`)
);

CREATE TABLE `updatesjobs` (
  `job` varchar(20) NOT NULL,
  `odate` varchar(8) NOT NULL,
  `status` varchar(5) NOT NULL,
  `runtime` varchar(20) NOT NULL,
  `endtime` varchar(20) NOT NULL
);

表 updatesjobs 没有针对所有日期的工作

如果我这样做

select l.nombre,l.job,u.odate 
  from lista l 
  left 
  join updatesjobs u
    on l.job=u.job 
   and u.odate = "20200615" 

显示信息

01. text01  JOB1    20200615
02. text02  JOB2    NULL
03. text03  JOB3    20200615
04. text04  JOB4    NULL    
05. text05  JOB5    20200615
06. text06  JOB6    NULL

信息按原样显示,但我不想按日期过滤

我需要出现在没有执行工作的所有日期

【问题讨论】:

  • 欢迎堆栈溢出。您能否举一个小例子来说明每个表中的数据以及您对响应的期望?像sqlfiddle 这样的网站上的例子会很棒!

标签: mysql sql join select


【解决方案1】:

如果我正确理解了您的问题,您可以枚举updatejobs、cross join 中的所有可用日期以及表lista 中的作业,最后使用not exists 来识别updatejobs 中缺失的行:

select l.nombre, l.job, d.odate 
from lista l 
cross join (select distinct o.date from updatejobs) d
where not exists (
    select 1 from updatesjobs u where u.job = l.job and u.odate = d.odate
)

【讨论】:

  • 嗨,如果我添加一个我需要返回数据的示例会更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
相关资源
最近更新 更多