2016-04-25 5 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; 

結果は、その計算結果としての第2の1を取る、多分on a.uid = b.uid =c.uid = d.uid=e.uid=f.uidこのクエリの条件である、です。 mysqlが実行時にこの問題を引き起こすような最適化されたステップを実行するかどうかはわかりません。

私は、mysqlはa.uid = b.uidを計算するときの両方a.uidとb.uidが1の場合c.uidが1である場合にのみ、その後コンピューティングはd.uidについて上に行くだろうので、それは、値1がtrueを意味出てくると思います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

私は一度に1つの句をコメントすることでこれをデバッグしようとします。 @CalculatingMachine - 試してみてください。 – MontyPython