MySQL LEFT問題に参加する - 私は何が間違っているのですか?

id はtdemog_pfpテーブル内で一意ではないことに注意してください。自動増分する固有のフィールドがあります。

私は次のSQLクエリを持っています:

SELECT id, name, total_staff AS StaffCount, COUNT( q60a ) AS TotalResp, (COUNT( q60a )/total_staff * 100) AS Perc 
FROM tdemog_pfp
LEFT JOIN tresults_pfp ON tdemog_pfp.id = tresults_pfp.q60a
GROUP BY name
ORDER BY name

Now, the demog table has multiple rows where entries can have q59, q60a, q60b and so on for the colomn qnum

私は結果を戻したいと思っていますが、私は問題を抱えています。これを上に追加すると、次のようになります。ゼロ結果(空の結果セット)が返されます。間違っている:

SELECT id, name, total_staff AS StaffCount, COUNT( q60a ) AS TotalResp, (COUNT( q60a )/total_staff * 100) AS Perc 
FROM tdemog_pfp
LEFT JOIN tresults_pfp ON tdemog_pfp.id = tresults_pfp.q60a
    WHERE qnum = q60a
GROUP BY name
ORDER BY name

どこが間違っていますか?

ありがとう、

H.

0

2 答え

テストはWHERE句でテストするのではなく、JOIN条件の一部にしてください。

SELECT id, name, total_staff AS StaffCount, COUNT( q60a ) AS TotalResp, (COUNT( q60a )/total_staff * 100) AS Perc 
FROM tdemog_pfp
LEFT JOIN tresults_pfp ON tdemog_pfp.id = tresults_pfp.q60a
    AND qnum = q60a
GROUP BY name
ORDER BY name
2
追加された
ありがとう - 今、tdemog_pfpテーブルのすべての行を戻します - 私はちょうどq60aに等しい行を望んでいましたか?
追加された 著者 Homer_J,
@ジョー - うん、一緒に試してみた、まだ戻ってすべての行tdemog_pfp :-(
追加された 著者 Homer_J,
オハイオ州の神 - それは当時のsoooの一つです....ありがとう@ypercube。私は適切に恥ずかしいです...
追加された 著者 Homer_J,
@Homer_J:リテラルの 'q60a' にマッチさせようとしていますか?引用符で囲むべきですか? AND qnum = 'q60a'
追加された 著者 Joe Stefanelli,
@Homer_J:Joeは WHERE qnum = 'q60a'を意味します。
追加された 著者 ypercubeᵀᴹ,

これを行う: WHERE qnum = q60a はクエリを内部結合に変換しています。したがって、この場合の結果はありません。

1
追加された
うーん、ok - 提案された解決策?
追加された 著者 Homer_J,
Yup - tdemog_pfpのすべての行を戻しますか?
追加された 著者 Homer_J,
@Homer_J hmmmm ....内部結合をしないでください?または、左結合の条件を次のように追加してみましたか? LEFT JOIN tresults_pfp ON where tecog_pfp.id = tresults_pfp.q60aおよびqnum = q60a where節を明らかに削除します。
追加された 著者 Icarus,