Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL查询未返回所有结果_Mysql_Left Join - Fatal编程技术网

MYSQL查询未返回所有结果

MYSQL查询未返回所有结果,mysql,left-join,Mysql,Left Join,我设置了一个视图表,其中包含以下字段: paymentID、jobID、jobNumber、jobType、countType、countID、salesRep、经销商名称、支票、paymentAmount、estimatedMailArrival 当支票在某个日期范围内时,我需要选择这些字段。checkTS是一个日期时间字段。在这些字段之上,我需要从另一个名为jobstasks的表中选择两个时间戳,它们可能存在,也可能不存在,因此我将使用左连接。为此,我设置了以下查询: SELECT

我设置了一个视图表,其中包含以下字段:

paymentID、jobID、jobNumber、jobType、countType、countID、salesRep、经销商名称、支票、paymentAmount、estimatedMailArrival

当支票在某个日期范围内时,我需要选择这些字段。checkTS是一个日期时间字段。在这些字段之上,我需要从另一个名为jobstasks的表中选择两个时间戳,它们可能存在,也可能不存在,因此我将使用左连接。为此,我设置了以下查询:

SELECT 
    s.jobID, s.jobNumber, s.jobType, s.countType, s.countID, s.salesRep,           s.dealershipName, s.checkTS, s.paymentID, s.paymentAmount, s.estimatedMailArrival, 
    jt1.completedTimestamp as Art, 
    jt2.completedTimestamp as List
FROM salesboard s
LEFT JOIN jobtasks jt1 ON s.jobID = jt1.jobID
LEFT JOIN jobtasks jt2 ON s.jobID = jt2.jobID
WHERE
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' AND
    jt1.taskID = 22 AND
    jt2.taskID = 23
ORDER BY s.checkTS DESC;
查询没有返回任何错误,但我发现它并没有提取所有记录,而是提取了242条应该提取的记录中的182条。我可以手动进入数据库mysql,查看应该拉取的记录,但不是。例如,未提取2013-03-04 10:11:00的时间戳

如果我删除所有的艺术和列表内容,我会得到正确数量的结果。。。242

SELECT 
    s.jobID, s.jobNumber, s.jobType, s.countType, s.countID, s.salesRep, s.dealershipName, s.checkTS, s.paymentID, s.paymentAmount, s.estimatedMailArrival
FROM salesboard s
WHERE
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59'
ORDER BY s.checkTS DESC;
如果使用左联接,为什么某些记录不会返回?

更改为:

WHERE
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' AND
    (jt1.taskID = 22 OR jt1.taskID IS NULL) AND
    (jt2.taskID = 23 OR jt2.tastID IS NULL)
左侧联接表上的任何WHERE条件仍被计数,如果该表未联接,则这些列的值将为空。

更改为:

WHERE
    s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' AND
    (jt1.taskID = 22 OR jt1.taskID IS NULL) AND
    (jt2.taskID = 23 OR jt2.tastID IS NULL)
左联接表上的任何WHERE条件仍在计数中,如果该表未联接,则这些列的值将为空。

使用左联接时,将这些表中的字段添加到WHERE条件中对您没有任何好处-与此时的内部联接相同

我喜欢将这些类型的WHERE条件移动到连接本身:

当使用左联接时,将这些表中的字段添加到WHERE条件中对您没有任何好处,这与此时的内部联接相同

我喜欢将这些类型的WHERE条件移动到连接本身:


不,它仍然返回182个结果:你能给我看看你问题中更新的查询吗?另外,为了以防万一,您是否使用done=NULL而不是IS NULL?IS是必需的。我只做了您所做的更改-是的,我做了IS而不是=。我会在编辑中向你展示,但斯盖德斯的回答解决了这个问题。谢谢你的意见。。。很高兴知道仍在统计的表。不,它仍返回182个结果:您能在问题中显示更新的查询吗?另外,为了以防万一,您是否使用done=NULL而不是IS NULL?IS是必需的。我只做了您所做的更改-是的,我做了IS而不是=。我会在编辑中向你展示,但斯盖德斯的回答解决了这个问题。谢谢你的意见。。。很高兴知道桌子还在清点中。