首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WHERE语句的MySQL左连接查询

问使用WHERE语句的MySQL左连接查询
EN

Stack Overflow用户
提问于 2011-07-15 20:44:52
回答 2查看 402关注 0票数 1

我在输出所需数据时遇到问题:

代码语言:javascript
复制
$start_of_month = mktime(00, 00, 00, date('m'), 01);
$datestart = date("Y-m-d H:i:s",$start_of_month);

'SELECT
orderheader.ordernumber
, ccilog.sessionid
, ccilog.orderid
, orderheader.userid
, users.emailaddress
, orderheader.webbrandcode
, orderitems.productcode
, orderitems.productname
, orderheader.datecreated
, ccilog.formattedpaymentdate
, orderheader.voucherpromotioncode
, orderheader.vouchercode
, orderheader.itemtotalsell
, orderheader.shippingtotalsell
, orderheader.totalbeforediscount
, orderheader.voucherdiscountvalue
, orderheader.totaldiscount
, orderheader.totalsell
, orderheader.totaltax
, orderheader.total
, orderitems.subtotal
, orderitems.discountvalue
, ccilog.amount 
FROM orderheader 
LEFT JOIN ccilog ON orderheader.id=ccilog.orderid 
LEFT JOIN orderitems ON ccilog.orderid=orderitems.orderid 
LEFT JOIN users ON orderheader.userid=users.id 
WHERE ccilog.formattedpaymentdate > "'.$datestart.'"'

我有一个脚本可以将此查询转换为csv文件。整个脚本运行得很好,直到我放入where语句,我没有得到我想要的东西。

我有三行包含的日期晚于月份日期$datestart的开始日期,但由于某种原因,只显示了其中的两行,我就是想不通为什么?

我的日期以相同的格式设置为$datestart (例如2011-07-07 13:31:28),3行的日期相同,但时间略有不同,大约相隔4分钟。

我卡住了,有人能给我点建议吗?

谢谢

编辑:数据如下:

代码语言:javascript
复制
---- Orderheader - 
row1 id:122
row2 id:123 
row3 id:124 

---- ccilog - 
Row1 orderid:122 formattedpaymentdate:2011-07-07 13:23:52
Row2 orderid:123 formattedpaymentdate:2011-07-07 13:28:24 
Row3 orderid:124 formattedpaymentdate:2011-07-07 13:31:28 

我确信该类型是date类型,但无法确定如何查看它。

EN

回答 2

Stack Overflow用户

发布于 2011-07-15 20:46:35

将WHERE条件移到ON子句中:

代码语言:javascript
复制
LEFT JOIN
        ccilog
ON      ccilog.orderid = orderheader.id
        AND ccilog.formattedpaymentdate > $datestart

在连接之后(逻辑上)对WHERE求值,因此过滤器应用于由LEFT JOIN生成的NULL值,并且条件永远不成立。

票数 0
EN

Stack Overflow用户

发布于 2011-07-15 21:10:21

如果问题真的是您所描述的,那么我猜ccilog中符合条件的三行中有一行的orderid在orderheader表中没有对应的id (如果您想要包含它,那么您确实需要在这些表之间进行右连接,而不是左连接...)。

否则,我支持Quassnoi,因为将JOINing留给表,然后指定WHERE条件,该表中的列必须为非空,这是没有多大意义的。

实际上,我们需要查看您的数据来弄清楚到底发生了什么--至少是主键/外键和formattedpaymentdate列,包括所涉及的类型(例如,如果formattedpaymentdate实际上是日期类型列而不是字符列,这可能会使问题变得混乱。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6707135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档