2014-03-19 121 views
0

这里是有问题的查询:这个查询为什么不工作?

SELECT e.id, e.name, u.x_account_username, ao.id 
FROM x_evidence e 
LEFT JOIN x_ambition_owner ao 
ON e.ambition_id = ao.id 
LEFT JOIN x_user u 
ON ao.profile_id = u.id 
WHERE e.updated BETWEEN '2014-03-19 10:16:00' AND '2014-03-19 11:16:00' 

有人能看到我在做什么错?

证据表:

id  ambition_id  name  updated 
1jk  2ef    abc  2014-03-19 10:33:31 

野心主表:

id  ambition_id  profile_id 
1op  2ef    1abc 

用户表:

id  x_account_username 
1abc rex hamilton 

我希望我的回归获得:

证据ID,姓名,用户名AME,相关的野心ID之间规定的时间(但这些可能会发生变化)

由于它不工作

+4

您可以通过移动状态进入on条款解决这个问题查询失败并给出错误?还是只是不返回任何行?你能提供你的表模式和样本数据吗? – Jon

+0

已更新,请看看 – cwiggo

回答

3

的一种方式是,where子句转动第一left joininner join。因此,您不会从您期望的查询中获取所有行。事实上,你可能没有得到任何一个。

SELECT ao.id AS a_id, e.id AS e_id, e.name AS evidence_name, 
     u.x_account_username AS username, 'evidence_edit' AS type 
FROM x_ambition_owner ao 
LEFT JOIN x_evidence e 
    ON ao.id = e.ambition_id 
    AND e.updated BETWEEN '2014-03-19 10:16:00' AND '2014-03-19 11:16:00' 
LEFT JOIN x_user u 
    ON ao.profile_id = u.id; 

EDIT(由OP):

这是我将要使用的查询:

SELECT e.id, e.name, u.x_account_username AS username, a.ambition_id 
FROM x_evidence e 
LEFT JOIN x_ambition_owner a 
ON e.ambition_id = a.ambition_id 
LEFT JOIN x_user u 
ON a.profile_id = u.id 
WHERE e.updated BETWEEN '2014-03-19 10:00:00' AND '2014-03-19 11:16:00' 
+0

这是我运行查询后返回的内容,它现在获取名称,这很棒,但它没有获取证据ID或名称,[链接](http://i.imgur。 com/vZ4ntX5.png) – cwiggo

+1

@Chris。 。 。据推测,这是因为没有人符合“更新”条件。 –

+0

它不工作,它可以与索引或类似的东西有关吗? – cwiggo