Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z zapytaniem, union czy join?
titijka
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 27.04.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
styx
post
Post #2





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 21.11.2005

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #3





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Sedziwoj 28.04.2007, 08:34:30
Go to the top of the page
+Quote Post
titijka
post
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 27.04.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
styx
post
Post #5





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 21.11.2005

Ostrzeżenie: (0%)
-----


  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

Ten post edytował styx 28.04.2007, 21:27:50
Go to the top of the page
+Quote Post
titijka
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 27.04.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
styx
post
Post #7





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 21.11.2005

Ostrzeżenie: (0%)
-----


  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

Ten post edytował styx 29.04.2007, 10:04:59
Go to the top of the page
+Quote Post
titijka
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 27.04.2007

Ostrzeżenie: (0%)
-----


Dziekuje za tak szybkie odpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Udalo mi sie, (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) Bardzo dziekuje za pomoc, troche podresetowalam to zapytanie i wszystko gra

(IMG:http://forum.php.pl/style_emoticons/default/offtopic.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 16:11