Join über mehrere Tabellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Join über mehrere Tabellen

    Versuche die ganze Zeit eine Abfrage mit Join hinzubekommen.
    Wenn ich die unter Abfrage starte erhalte ich die Meldung:
    #1104 - The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

    Setze ich SET SQL_BIG_SELECTS=1 vor der Abfrage geht es ,aber das kann ja woll keine saubere lösung sein
    Alle Tabellen sind in Index mit der Artikel id verknüpft
    In Tabelle a,b,c sind gleich viele Datensätze nur in e und d sind es nicht gleiche

    Code:
    SELECT a . * , b . * , c . * , d . * , e . *
    FROM article a
    LEFT JOIN article_price_set b ON a.artikel_id = b.article_price_set_artikel_id
    LEFT JOIN artikel_api c ON a.artikel_id = c.artikel_api_artikel_id
    LEFT JOIN amazon_buyer_box d ON a.artikel_id = d.amazon_buyer_box_artikel_id
    LEFT JOIN stock e ON a.artikel_id = e.stock_article_id
    WHERE a.storehouse =11
    hier noch mal in Datenbank details :
    a.b.c =1,796 Datensätze
    d = 1,427 Datensätze
    e=287 Datensätze

    Wie kriege ich jetzt die Abfrage sauber hin das er mir alle Ausgeben tut von a und dazu das Ergniss auch mit nuller dazwischen von den anderen Tabellen

    Grüß
    Martin

  • #2
    So?
    PHP-Code:
    SELECT 
      
    *
    FROM 
      article a
    ,
      
    article_price_set b,
      
    artikel_api c,
      
    amazon_buyer_box d,
      
    stock e
    WHERE a
    .artikel_id b.article_price_set_artikel_id
      
    AND a.artikel_id c.artikel_api_artikel_id
      
    AND a.artikel_id d.amazon_buyer_box_artikel_id
      
    AND a.artikel_id e.stock_article_id
      
    AND a.storehouse 11
    Ggf. solltest du noch dezidiert die einzelnen Spalten angeben.

    Peter
    Zuletzt geändert von Kropff; 18.10.2009, 18:59.
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hallo Martin,

      dir ist ja bestimmt schon aufgefallen, dass deine Abfrage durch die gemeinsame Verknüpfung mit lediglich einer Relation ein Kreuzprodukt vierer Tabellen darstellt. Daher ist es nicht überraschend, dass das Result Set ziemlich groß wird. Wichtig ist auch, dass die Fremdschlüssel alle indiziert sind.

      MySQL mitzuteilen, dass du temporär die Grenzwerte für "vernünftige" Selects überschreitest, ist nicht direkt unsauber. Es wäre aber ratsam, zu überlegen, ob du nicht vielleicht die gejointen Daten zum Teil später erst nachlädst oder einzelne Artikel auswählst und nicht gleich alle eines Ladens, denn im Browser macht so eine große Tabelle ja auch keinen Spaß.

      Von Peters Variante ist in jedem Fall abzuraten. Er holt ein Kreuzprodukt aus 5 Relationen und wirft dann erst die unkorrelierten weg, was nicht nur schlechter Stil, sondern auch höchst unperformant ist. Auch die Reihenfolge der Bedingungen spielt eine große Rolle und die Auswahl nach storehouse hätte in jedem Fall an erster Stelle der Where-Klausel stehen müssen.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar

      Lädt...
      X