• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapytanie SQL nie zwraca listy wszystkich rekordów

Object Storage Arubacloud
0 głosów
143 wizyt
pytanie zadane 11 marca 2023 w SQL, bazy danych przez qax Dyskutant (8,060 p.)

Hej.

Załóżmy, że mamy fikcyjną tabelę z listą 9 artystów:

Tabela artists

Teraz załóżmy, że artyści o artist_id 6, 7 i 8 tworzą muzykę w kolaboracji (tzn. mają wspólny zespół - oczywiście poniższe dane są zmyślone), dlatego łączy ich wspólny band_id o numerze 7:

Tabela artists_and_bands

 

Mysimy jeszcze rozpatrzyć sytuację, gdy jacyś artyści ukazują się pod różnymi aliasami (tzn. alternatywnymi nazwami), stąd artyści (kolumna artist_id) 6 i 7 mają wspólne alias_id równe 6, a analogicznie artyści 8 i 9 mają wspólny alias 7:

Tabela artists_and_aliases

No i chcemy wyświetlić listę skróconych nazw URL wszystkich artystów którzy w jakikolwiek sposób są powiązani z jednym konkretnym podanym artystą... Narazie zrobiłem coś takiego:

SELECT 
    `url`
FROM
    `artists`
WHERE
    `artist_id` IN (SELECT 
            `artist_id`
        FROM
            `artists_and_bands`
        WHERE
            `band_id` IN (SELECT 
                    `band_id`
                FROM
                    `artists_and_bands`
                WHERE
                    `artist_id` IN (SELECT 
                            `artist_id`
                        FROM
                            `artists_and_aliases`
                        WHERE
                            `alias_id` IN (SELECT 
                                    `alias_id`
                                FROM
                                    `artists_and_aliases`
                                WHERE
                                    `artist_id` = 8))))

No i rezultat jest w pełni prawidłowy (4 rekordy) - znalazło wszystkie nazwy url artystów na podstawie wejściowego WHERE `artist_id` = 8:

Jednak gdy zmienię ostatnią linię SQL na `artist_id` = 7 - otrzymuję coś innego (tylko 3 rekordy):

No i problem polega na tym, że fsol jest aliasem future-sound-of-london, który z kolei jest jednym z trzech współgrających muzyków, a jednak pomija go - dzieje się też tak w przypadku podania WHERE `artist_id` = 6 (a przy 9 już jest OK). Mniej więcej wiem nas czym polega problem, ale nie mam pojęcia jak go rozwiązać. Wiem, że to trudne ale za pomoc wynagrodzę. smiley

komentarz 11 marca 2023 przez PreZmyK Pasjonat (21,470 p.)
Artysta 7 jest w band 7, w którego skład wchodzi artysta (6,7,8) oraz alias z artystami (6,7).

Arysta 8 jest w band 7, ale ma alias 7 z artystami (8,9).

A w ogóle to nie lepiej to zjoinować ?
komentarz 11 marca 2023 przez qax Dyskutant (8,060 p.)
Dzięki za odpowiedź. Rozumiem, że dane w bazie są OK czy coś przeoczyłem? Na początku też tak myślałem żeby użyć złączenia tabel, tylko jak??

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 557 wizyt
0 głosów
1 odpowiedź 220 wizyt
0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 5 stycznia 2018 w SQL, bazy danych przez Gucci Gaduła (4,580 p.)

92,539 zapytań

141,382 odpowiedzi

319,477 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...