2016-04-25 73 views
-1

我有一个MySQL查询,我在查询中使用内部连接。由于一些未知的原因,它不能按我的预期工作。我不确定查询有什么问题。任何人都可以告诉我我做错了什么。MySQL内部连接查询:不正确的输出

这是查询。

SELECT f.uid, a.uid, b.uid, c.uid, 
     d.uid, e.uid, 
     f.date, a.email, a.fname, a.lname, 
     a.mobile, a.pic, a.address 
FROM users a 
inner join friends b 
inner join exp c 
inner join skill d 
inner join personaldetails e 
inner join jobs f 
    on a.uid = b.uid =c.uid = d.uid=e.uid=f.uid 
where f.job_id= 22 
    and f.ignored=0 
    and a.fname like '%Rah%' 
order by f.date DESC 

如果我运行此查询话,我想我会得到a.uid =1, b.uid =1, c.uid =1, d.uid=1, f.uid =1

但我正在逐渐a.uid =1, b.uid=10, c.uid=10, d.uid=1,e.uid=1,f.uid =1

+0

感谢向下表决。我会喜欢解释。所以,我会纠正这一点。 – Ironic

回答

1

这似乎是一个奇怪的问题,我刚才尝试了下面的东西。

select 1=10=10=1=1=1 from dual; 

结果为,

select 10=10=1=1=1=1 from dual; 

结果为,也许这on a.uid = b.uid =c.uid = d.uid=e.uid=f.uid查询条件采取第二个作为其计算结果。我不确定mysql是否会在执行某种优化步骤​​时导致此问题。

我想如果a.uid当MySQL计算a.uid = b.uid和b.uid都为1,它出来的值1意味着true,所以只有当c.uid是1,那么计算将继续对d.uid, e.uid,f.uid。

不管怎样,试试这个,可能会帮助你;)

select f.uid, a.uid, b.uid, c.uid, 
    d.uid, e.uid, 
    f.date, a.email, a.fname, a.lname, 
    a.mobile, a.pic, a.address 
from users a, friends b ,exp c, skill d, personaldetails e, jobs f 
where f.job_id= 22 
and f.ignored=0 
and a.fname like '%Rah%' 
and a.uid = b.uid 
and b.uid = c.uid 
and c.uid = e.uid 
and e.uid = f.uid 
order by f.date desc 

如果您发现了一些其他的解释,分享给我PLZ)

+0

你是对的。我也发现。 a = b = c在这种情况下不起作用。投票并接受答案。 – Ironic

1

你试过分裂它呢?

select f.uid,a.uid,b.uid,c.uid,d.uid,e.uid,f.date,a.email,a.fname,a.lname,a.mobile,a.pic,a.address 
from users a 
    inner join friends b on (a.uid = b.uid) 
    inner join exp c on (b.uid = c.uid) 
    inner join skill d on (c.uid = d.uid) 
    inner join personaldetails e on (d.uid = e.uid) 
    inner join jobs f on (e.uid = f.uid) 
where f.job_id= 22 and f.ignored=0 and a.fname like '%Rah%' order by f.date DESC 
+1

让我试试。投了票。 – Ironic

+0

这没有奏效。我得到多行。 – Ironic

1

请检查其中一个表是否有重复。我相信这是事实。如果以下查询返回记录,那么您将有罪魁祸首。

SELECT f.uid, a.uid, b.uid, c.uid, 
     d.uid, e.uid, 
     f.date, a.email, a.fname, a.lname, 
     a.mobile, a.pic, a.address 
FROM users a 
inner join friends b 
inner join exp c 
inner join skill d 
inner join personaldetails e 
inner join jobs f 
    on a.uid = b.uid =c.uid = d.uid=e.uid=f.uid 
where f.job_id= 22 
    and f.ignored=0 
    and a.fname like '%Rah%' 
group by f.uid, a.uid, b.uid, c.uid, 
     d.uid, e.uid 
having count(*) > 1 
order by f.date DESC; 
+0

我运行查询没有记录返回。 – Ironic

+0

我会尝试通过一次评论一个子句来调试。 @CalculatingMachine - 试试。 – MontyPython