[PostgreSQL] Dwukrotne zapytanie do jednej tabeli |
[PostgreSQL] Dwukrotne zapytanie do jednej tabeli |
11.06.2014, 12:06:05
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (0%) |
Witam,
Mam tabele w której jest ponad 500 tys rekordow, które wyglądają tak: id: | userid: | course: | element: | value: 1 | 2 | 45 | status | passed 2 | 2 | 45 | score | 96 3 | 3 | 56 | status | incomplete 4 | 4 | 54 | status | failed 5 | 4 | 54 | score | 30 6 | 3 | 56 | score | 67 Potrzebuję najpierw wybrać który user w którym course ma element='status' i value='passed' albo 'failed', a następnie, jeśli ma 'passed' albo 'failed' w danym kursie, wypisać value gdy element='score' w tym course. Trochę to zawiłe ale mniejwięcej tak to wygląda Dzięki! |
|
|
11.06.2014, 12:15:39
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
1. Masz zrypaną strukturę bazy na pierwszy rzut oka.
2. Zapytanie, które wyciągnie dane w "normalnej" formie:
|
|
|
11.06.2014, 13:20:05
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (0%) |
Super, działa! Dzięki!
A czy dałoby się do tego jeszcze dołożyć wypisywanie tylko tych rekordów, których nie ma już w innej tabeli? Generalnie jest tak, że pierwsze zapytanie wyszukuje rekordy (tak jak w poście powyżej) i wrzuca je do tabeli 'report'. A teraz chciałbym, żeby do tabeli 'report' dopisywane były tylko te rekordy, których tam jeszcze nie ma. Czyli powyższa kwerenda + LEFT JOIN? tylko jak |
|
|
11.06.2014, 13:31:24
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
|
|
|
11.06.2014, 13:46:24
Post
#5
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (0%) |
no właśnie id mi nie kopiuje z oryginalnej tabeli... musiałoby by być
Value też musi sprawdzać bo możliwe, że ktoś poprawił swój wynik i wtedy powinny być 2 wpisy w tabeli report - w oryginalnej tabeli aktualizuje się SCORE i STATUS. Wiem, że ktoś to głupio wymyślił ale tak to już zastałem... Z góry dzięki! |
|
|
11.06.2014, 14:00:18
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
|
|
|
12.06.2014, 07:22:25
Post
#7
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 2.05.2011 Ostrzeżenie: (0%) |
Dokładnie chce sprawdzać po 'course', 'value', 'userid'. Jeśli taki rekord istnieje w tabeli 'report', pomija go. Chodzi o to, że w pierwszej tabeli np. score może się zmienić - ktoś miał 90, a zmieniło mu się na 100 i chciałbym, żeby w tej drugiej tabeli (report) były wtedy 2 rekordy.
Próbowałem tak jak pisałeś w ostatnim poście, ale jakby w ogóle nie wziął pod uwagę tego warunku... wyświetla wszystkie rekordy... |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 01:56 |