konto usunięte

Temat: Problem z zapytaniem SQL JOIN

Skoro to grupa specjalistów od baz danych to może ktoś mi podpowie w sprawie SQL.

Dla uproszczenia powiedzmy że mam tylko 5 tabel :
User - zawiera dodatkowe kolumny userId2 oraz userDataId
UserData
Meet - zawiera userId organizatora co wskazuje konkretny rekord tabeli User
Guest - zawiera userId2
Meet_Guest - jak nazwa wskazuje powiązanie kluczy Meet i Guest co stanowi listę uczestników danego spotkania

Komulna userId2 to coś w rodzaju kodu dostępu, unikalnego podobnie jak Id ale jednak będącego stringiem a nie typem INT.

I teraz sedno problemu. Potrzebuję poprzez ORM zrobić JOIN z określonych Meet.
Tak aby w wyniku otrzymać listę Meet w którym będą dane z UserData organizatora (np kolumna name), oraz lista Guest z danymi UserData.

Nie potrafię napisać odpowiedniego zapytania SQL. Stworzyłem jedynie takie które nie zwraca UserData dla Guest (wybaczcie za błędy w składni ale to wynika z korzystania z ORM).


SELECT m AS meet, d.name AS name
FROM Meet AS m
INNER JOIN User AS u WITH u.id = 1
INNER JOIN UserData AS d WITH u.UserDataId = d.id
INNER JOIN m.guests AS g WITH u.userId2 = g.userId2


Czy ktoś byłby w stanie mi podpowiedzieć jak podpiąć UserData do Guest?

Temat: Problem z zapytaniem SQL JOIN

Dawid Z.:
Czy ktoś byłby w stanie mi podpowiedzieć jak podpiąć UserData do Guest?

Tu nie trzeba być specjalistą od baz (ja się za takiego nie uważam).
Masz jakąś gównianą strukturę dlatego nikomu nie chce się tracić czasu.
Dublowanie postów w różnych grupach też raczej nic nie da.

Widać też co ORM robi z ludzi - nie umieją napisać poprawnie zapytania SQL tak jak dzieci w szkołach przez kalkulatory nie umieją tabliczki mnożenia.

Tak na szybko o ile dobrze zrozumiałem powyższe:
meet.id ->meetGuest.meetid - meetGuest.guestId->guest.id - guest.userId2->user.userId2 - user.userdataId->userdata.id

Chyba nie rozumiesz, że musisz 2 razy połączyć tabelę user - raz jako organizator a drugi raz żeby wyciągnąć dane z userData czyli najpierw
JOIN User AS organizator WITH organizator .id = 1
a potem ... JOIN User AS userGuest WITH userGuest .userId2 = guest.userId2Ten post został edytowany przez Autora dnia 08.01.17 o godzinie 19:38

konto usunięte

Temat: Problem z zapytaniem SQL JOIN

Tak, struktura jest gówniana. Wynika to z wymagań biznesowych i tego co już było. Ale to mało istotne.

Taki zwykły JOIN jak napisałeś nie zwraca mi kompletnie nic poprzez ORM. Próbowałem tego wcześniej i myślałem że problem jest w SQL. Ale najwidoczniej problem leży po stronie ORM, że tego nie pokazuje.Ten post został edytowany przez Autora dnia 08.01.17 o godzinie 23:17
Albert D.

Albert D. Software Developer

Temat: Problem z zapytaniem SQL JOIN

Cos bedzie w stylu

SELECT m AS meet, d.name AS name
FROM Meet AS m
INNER JOIN User AS o ON (u.id = m.userId) -- organizator
INNER JOIN UserData AS od ON (od.id = o.UserDataId)
INNER JOIN Meet_Guest AS mg ON (mg.meetId = m.id) -- nie wiem jakie masz nazwy kolumn w Meet_Guest
INNER JOIN Guest AS g ON (g.id = mg.guestId)
INNER JOIN User AS gu ON (gu.id = g.userId) -- uczestnik
INNER JOIN UserData AS gud ON (gud.id = gu.UserDataId)
WHERE m.userId = 1

Tylko to zapytanie nie zwroci ci np. spotkan ktore nie maja uczestnikow.
Nie mam mozliwosci sprawdzenia czy zadziala wiec moga byc jakies bledy. Dalo by sie to jeszcze inaczej napisac np. zeby 2 razy nie siegac do User i UserData ale jesli masz korzystac z ORM to nie ma co komplikowac. Nie kazdy ORM daje rade przy bardziej rozbudowanej strukturze lub zapytaniach. W takich przypadkach najczesciej korzysta sie z czystego SQL jesli ORM na to pozwala, a wiekszosc pozwala.

Temat: Problem z zapytaniem SQL JOIN

Dawid Z.:
Taki zwykły JOIN jak napisałeś nie zwraca mi kompletnie nic poprzez ORM. Próbowałem tego wcześniej i myślałem że problem jest w SQL. Ale najwidoczniej problem leży po stronie ORM, że tego nie pokazuje.

A próbowałeś najpierw napisać zapytanie SQL i sprawdzić czy ono działa ?
Dopiero jak zadziała to próbujesz zrobić to na ORM a jak się nie da to wykonujesz te zapytanie SQL przez ORM bezpośrednio.

konto usunięte

Temat: Problem z zapytaniem SQL JOIN

Ja bym wyciągnął guestów zapytaniem a potem union z organizatorem i cześć.
Zwykle zaczyna się od jednej tabeli, z warunkiem - np. na organizara. Potem można doklejać kolejne tabele...

Następna dyskusja:

SQL Server 2005 - problem z...




Wyślij zaproszenie do