MYSQL查询未返回所有结果
我设置了一个视图表,其中包含以下字段: paymentID、jobID、jobNumber、jobType、countType、countID、salesRep、经销商名称、支票、paymentAmount、estimatedMailArrival 当支票在某个日期范围内时,我需要选择这些字段。checkTS是一个日期时间字段。在这些字段之上,我需要从另一个名为jobstasks的表中选择两个时间戳,它们可能存在,也可能不存在,因此我将使用左连接。为此,我设置了以下查询:MYSQL查询未返回所有结果,mysql,left-join,Mysql,Left Join,我设置了一个视图表,其中包含以下字段: paymentID、jobID、jobNumber、jobType、countType、countID、salesRep、经销商名称、支票、paymentAmount、estimatedMailArrival 当支票在某个日期范围内时,我需要选择这些字段。checkTS是一个日期时间字段。在这些字段之上,我需要从另一个名为jobstasks的表中选择两个时间戳,它们可能存在,也可能不存在,因此我将使用左连接。为此,我设置了以下查询: SELECT
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而不是=。我会在编辑中向你展示,但斯盖德斯的回答解决了这个问题。谢谢你的意见。。。很高兴知道桌子还在清点中。