WebHU - Programozási kérdések és válaszok

SQL sok-sok kapcsolat a Join és Where záradékkal

Megpróbálok létrehozni egy sok a sokhoz SQL lekérdezést, majd az eredményeket más táblákkal egyesíteni.

5 táblám van: cikkek, hashtagek, cikkek_hashtagok (amelyek a hashtag.id és a cikkek.id leképezik), felhasználók, szerzők.

Ha az összes cikket le akarom kérdezni, és a szerzői és felhasználói információkat össze akarom kapni, akkor ezt a lekérdezést használom, és működik:

SELECT articles.*, authors.name as authorName, users.name as userName
    FROM articles
    LEFT JOIN authors ON articles.authorId = authors.id
    LEFT JOIN users ON articles.userId = users.id

Ellenkező esetben, ha megpróbálok lekérdezni minden cikket egy bizonyos hashtaggel, akkor ezt használom (amint kiderül: itt):

SELECT articles.*
    FROM articles, hashtags, articles_hashtags
    WHERE hashtags.id = articles_hashtags.hashtagId
    AND (hashtags.name IN ('prova'))
    AND articles.id = articles_hashtags.articleId
    GROUP BY articles.id

De ezen a másodikon hogyan tudom összekapcsolni a többi tábla információit (felhasználók és szerzők)?

Kösz!

02.04.2015

Válaszok:


1

Lehet, hogy ezt keresed

Feltételezem, hogy az összes egyező rekordot keresi

    SELECT art.*
    FROM articles art
    INNER JOIN articles_hashtags arc_hs ON art.id = arc_hs.articleId
    INNER JOIN hashtags hs on hs.id = arc_hs.hashtagId
    INNER JOIN authors aut ON art.authorId = aut.id
    INNER JOIN users u ON art.userId = u.id
    WHERE hs.name IN ('prova')
    GROUP BY art.id

Ha minden cikkre vonatkozó információt szeretne, függetlenül attól, hogy más táblákban vannak-e egyező rekordok, akkor használhatja a left join

  SELECT art.*
    FROM articles art
    LEFT JOIN articles_hashtags arc_hs ON art.id = arc_hs.articleId
    LEFT JOIN hashtags hs on hs.id = arc_hs.hashtagId
    LEFT JOIN authors aut ON art.authorId = aut.id
    LEFT JOIN users u ON art.userId = u.id
    WHERE hs.name IN ('prova')
    GROUP BY art.id

Megjegyzés: Ön a CARTESIAN JOIN értéket használja a második lekérdezésében, amely very bad

02.04.2015
  • Kösz! Működik – néhány javítással (gondolom, mert nem tudtad kipróbálni a lekérdezést). Itt a megfelelő SELECT art.* FROM articles art INNER JOIN articles_hashtags arc_hs ON art.id = arc_hs.articleId INNER JOIN hashtags hs ON hs.id = arc_hs.hashtagId INNER JOIN authors aut ON art.authorId = aut.id INNER JOIN users u ON art.userId = u.id WHERE hs.name IN ('prova') GROUP BY art.id. Ha ezt helyesbíti válaszában, megoldottnak jelölöm a kérdést! 03.04.2015
  • @addis Igen, nem próbáltam. 03.04.2015
  • A kérdés második lekérdezésében valójában nincs derékszögű join. Az összekapcsolások a WHERE záradékban vannak, ami nem ajánlott, de az összes tábla össze van kapcsolva. 03.04.2015
  • @addis frissítő válaszom van 03.04.2015
  • @addis És győződjön meg róla, hogy van indexe az id, articleId, hashtagId, authorId és name mezőkben 03.04.2015
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..