2012-01-26 28 views
0

編集:OK、私はより明確にする必要があると思います - 私は、結果テーブルからのカウント(もしあれば)に対してテーブルacmeに現れるすべての '名前'を表示することを望みます。希望は意味をなさないでしょうか?MySQL左結合

大きな問題があり、私の脳が正常に機能していません。

私がやりたいことは、結合による単一のステートメントで、共通フィールドの行数を数えることです。

SELECT name, COUNT(name) as Count FROM acme 
    SELECT name, COUNT(name) as Total FROM results 

私はそれがこのような何か...

SELECT acme.name, COUNT(acme.name) As Count, 
      COUNT(results.name) as Total 
    FROM acme 
    LEFT JOIN results ON acme.name = results.name 
    GROUP BY name 
    ORDERY BY name 

する必要があります確信している。しかし、それは正しいカウントを戻すしません。

私は間違っていると思っています...これは私が知っていることは非常に明白です。参加のため、それはだよう

H.は

+1

なぜ、内部結合の左外部結合instadを使用しますか? – Mithrandir

+0

テーブルのスキーマを投稿できますか? – Triztian

答えて

2

あなたのフィードバックから、これはあなたが望むものを得るでしょう。最初に "ACME"ファイルから一意の名前/カウントを取得する必要があります。次に、そのレコードのレコード数を結果テーブルに追加します。そうしないと、デカルトの結果がカウントアップされます。 ACMEの名前が「X」で5回、結果に「X」が20回ある場合、合計は100となります。以下の照会は実際には「X」、「5」、「20」のいずれかの行が表示されますfor ..(ACMEには多くの名前がありますが)。

私はあなたの、結果テーブルに存在しない、それはあなたの最終的な答え

select 
     JustACME.Name, 
     JustACME.NameCount, 
     COALESCE(COUNT(*), 0) as CountFromResultsTable 
    from 
     (select a.Name 
       count(*) as NameCount 
      from 
       acme a 
      group by 
       a.Name) JustACME 

     LEFT JOIN results r 
     on JustACME.Name = r.Name 
    group by 
     JustACME.Name 
+0

上記を参照すると、acmeに表示されるすべての名前が必要な場合は、結果の数に対して必要です。 –

+0

@Homer_J、改訂された答えも参照.... Acmeテーブルには指定された名前の複数のエントリがあり、結果にも同じ名前の複数のエントリがありますか?または... ACMEテーブルが必要とする一意の名前を表示していますか(つまり、acmeテーブルの名前ごとに1つだけです)、「結果」テーブルに何回表示されているかを確認します。そういうわけで、あなたが両方のテーブルに対して混乱し、それらに参加しようとしていたという混乱がなぜ起こったのでしょう。 – DRapp

+0

両方のテーブルに複数のエントリ - 私は頭痛を引き起こしていると思う:-( –

0

それはあなたのカウントにねじ込むだ、見えます。 SELECT * FROM ...で結合を実行し、結果の表を見てください。そこから問題が明らかになるはずです。 = D

0

はいからそれらを削除しませんACMEテーブルの名がある場合には参加LEFTに変更しました参加(内側または外側、重要ではない)が結果を乱しています。

実際には、合計ではなく同じ名前の行の製品が返される可能性があります。

最初のテーブルの行を合計し、2番目のテーブルの行を合計し、に結合します。このよう

Select name, a.count as Count, r.count as Total 
From (select name, count(*) from acme group by name) a 
Left join (select name, count(*) from results group by name) r using (name) 
+0

ありがとうございますこれがうまくいくと、1行だけ戻ってくるのですか? –

0

あなたは、これはちょうど、すべてを複雑にする二つの文を使用して禁止し、なぜ私は表示されません。 私がこれを見る唯一の理由は、2つの結果を1つの答えにすることだけです。 後者がうまくいくかどうかはわからないが、私はこれをしようとするだろう:

SET @acount = (SELECT count(DISTINCT name) FROM acme); 
SELECT count(DISTINCT name) as Total, @acount as Count FROM results 

私は1つのクエリとしてこれを掲示し、(たぶん)正しい結果を取り戻すでしょう。どの名前がどのくらい頻繁に重複しているか、または一意の名前を数えたいかどうかを知りたいかどうかは疑問からは分かりません。

+0

フィードバックを気に入っていますが、それをソートしました! –

関連する問題