Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z zapytaniem, union czy join?
Forum PHP.pl > Forum > Bazy danych > MySQL
titijka
Witam, mam 3 tabele:

Dane: Id_Danej, Nazwa_Danej

Finanse: Id_F, Id_Danej, Wartosc, Id_Formularza
i
Formularze: Id_Formularza, Id_Pozycji

Chcę wyświetlić dane dla wszystkich Id_Pozycji, dane dla nich są w tabeli Finanse. Dla Id_Pozycji, dla których nie ma danych w tabeli Finanse, ma wpadać wartość null.
warunek: Id_Pozycji=Id_Danej
Próbowałam joinem, ale po podaniu ostatniego warunku wyświetlane są tylko wyniki dla których są dane w bazie, natomiast przy unoin dublują mi się w wyniku id_pozycji, dla których są dane.
Pomóżcie exclamation.gif!
styx
  1. SELECT dane.*,finanse.*
  2. FROM dane LEFT JOIN finanse ON dane.id_danej = finanse.id_danej
  3. LEFT JOIN finanse ON
  4. finanse.id_formularza=formularze.id_formularza


pokaz swoje zapytanie bo nie wiem czy o to Ci chodziło
Sedziwoj
Jest błąd
  1. SELECT dane.*,finanse.*
  2. FROM formularze LEFT JOIN finanse ON finanse.id_formularza=formularze.id_formularza INNER JOIN dane ON dane.id_danej = finanse.id_danej

Tylko że warunek Id_Pozycji=Id_Danej powoduje, że jak nie ma Formularza w Finanse to nie możemy sprawdzić w Danych, ponieważ Finanse łączy nam obie tabele.
titijka
Moje zapytanie wyglądało tak:

  1. (SELECT Formularze.Id_Pozycji,
  2. NULL AS NazwaDanej,NULL AS wartosc,NULL AS formularz
  3. FROM Formularze WHERE Formularze.Id_Formularza=x)
  4. UNION
  5. (SELECT Finanse.Id_Danej, Dane.NazwaDanej,
  6. Finanse.Wartosc,
  7. Finanse.Id_Formularza
  8. FROM Finanse JOIN Dane
  9. ON Dane.Id_Danej=Finanse.Id_Danej
  10. )


Wyświetla wszystkie id_pozycji z tabeli Formularze, ale dubluje mi id_pozycji, dla których istnieją dane w tabeli Finanse
styx
  1. (SELECT Formularze.Id_Pozycji, NULL AS NazwaDanej,NULL AS wartosc,NULL AS formularz
  2.  
  3. FROM Formularze WHERE (Formularze.Id_Formularza=x) AND (Formularze.Id_Pozycji NOT IN (
  4.  
  5. SELECT Finanse.Id_Danej, Dane.NazwaDanej,Finanse.Wartosc,Finanse.Id_Formularza
  6. FROM Finanse JOIN Daneon Dane.Id_Danej=Finanse.Id_Danej
  7.  
  8. )
  9. )
  10. )
  11. UNION
  12. (
  13. SELECT Finanse.Id_Danej, Dane.NazwaDanej,Finanse.Wartosc,Finanse.Id_Formularza
  14. FROM Finanse JOIN Daneon Dane.Id_Danej=Finanse.Id_Danej
  15. )


jeżeli Formularze.Id_Pozycji i Finanse.Id_Danej to to samo
titijka
Tak, Formularze.Id_Pozycji i Finanse.Id_Danej to to samo,
ale po wpisaniu powyzszego zapytania wyskakuje mi blad:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS
styx
  1. (SELECT Formularze.Id_Pozycji, NULL AS NazwaDanej,NULL AS wartosc,NULL AS formularz
  2. FROM Formularze WHERE (Formularze.Id_Formularza=x) AND (
  3. Formularze.Id_Pozycji NOT IN (
  4. SELECT Finanse.Id_Danej
  5. FROM Finanse JOIN Dane ON Dane.Id_Danej=Finanse.Id_Danej
  6. )
  7. )
  8. )
  9. UNION
  10. (
  11. SELECT Finanse.Id_Danej, Dane.NazwaDanej,Finanse.Wartosc,Finanse.Id_Formularza
  12. FROM Finanse JOIN Dane ON Dane.Id_Danej=Finanse.Id_Danej
  13. )


sorx w zapytaniu podrzędneym tego typu tylko jedna wartość w selecie może byc
titijka
Dziekuje za tak szybkie odpowiedzi smile.gif . Zapytanie wyswietla juz id_pozycji bez ich duplikowania, ale za to nie wyswietla wszystkich id_pozycji z tabeli Formularze, niektóre teraz zostaly pominiete sad.gif

Udalo mi sie, cool.gif Bardzo dziekuje za pomoc, troche podresetowalam to zapytanie i wszystko gra

offtopic.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.