MySQL Left Join gibt nicht erwartetes Reultat zurück

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MySQL Left Join gibt nicht erwartetes Reultat zurück

    Hey Leute,
    Ich hab ein Problem mit einem Join den in MySQL versuche umzusetzen.

    Hier erstmal die Tabellen:
    table_downloads:
    download_id | user_id | unique_id | time_downloaded | ip_address
    1 0 1 1285530286 127.0.0.1
    2 7 1 1285530286 127.0.0.1
    3 7 1 1285530286 127.0.0.1
    4 7 1 1285530286 127.0.0.1

    table_ratings:
    rating_id | user_id | unique_id | liked | disliked | time_rated | ip_address
    1 1 6 1 0 1284655570
    2 1 7 1 0 1284655570
    3 2 8 0 1 1284655570
    4 3 9 1 0 1284655570


    Und hier is die Abfrage:

    Quellcode

    1. SELECT SUM(tables_ratings.liked) AS liked, SUM(table_ratings.disliked) AS disliked,COUNT(table.download_id) AS downloadsFROM table_ratingsLEFT JOIN table_downloadsON table_ratings.unique_id = table_downloads.unique_idWHERE tables_downloads.unique_id = 1



    Das Ergebnis ist jetzt folgendes:
    liked | disliked | downloads
    8 0 8

    Erwartet hätte ich aber folgendes:
    liked | disliked | downloads
    2 NULL 4

    Kann mir wer sagen, was ich falsch gemacht habe? Ich komme einfach nicht drauf....

    Danke im Vorraus!


  • warum schränkst du denn auf deine join tabelle - und nicht die haupttabelle ein? Man sollte den Query Optimizer nicht herausfordern.
    SUM sollte dir einen Integer zurück geben, das NULL würde ich also nicht erwarten.

    Ansonsten joinst du ja mit einem LEFT JOIN auch auf Daten, die nicht matchen. Deswegen solltes du einfach auf INNER JOIN umstellen und es wird bestimmt funktionieren.

    Dein fertiges Query würde dann wie folgt aussehen:

    Quellcode

    1. SELECT SUM(tables_ratings.liked) AS liked,
    2. SUM(table_ratings.disliked) AS disliked,
    3. COUNT(TABLE.download_id) AS downloads
    4. FROM table_ratings
    5. INNER JOIN table_downloads
    6. ON table_ratings.unique_id = table_downloads.unique_id
    7. WHERE table_ratings.unique_id = 1