SQL: Jak zaktualizować lub wstawić, jeśli nie istnieje?
Mam poniżej wstawkę SQL, która działa dobrze, jednak chciałbym sprawdzić, czy DATA = xxxx, NAZWA = xxxx i JOB = xxx i zaktualizować GODZINY, jeśli istnieją, w przeciwnym razie wstaw nowy wiersz. Czy jest to możliwe z SQL?
"INSERT INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');
Próbując poniżej lub zastępując z tymi samymi wynikami, za każdym razem dodawany jest nowy wiersz.
add_time = conn.prepareStatement("INSERT OR REPLACE INTO RESOURCE (NAME, DATE, JOB, HOURS) VALUES ('"+name+"', '" + date + "', '"+job+"','"+hours+"');");
Na przykład:
jeśli poniższe było w DB i John chciałby zaktualizować swój zegar, sprawdziłby, czy nazwa, data, zadanie są zgodne z wartościami, które próbuje wstawić, i jeśli są to tylko aktualizacje GODZINOWE. W przeciwnym razie, jeśli żadne z nich nie istniało razem (Jan mógł napisać godziny na podstawie innej DATY lub ZADANIA), wstaw nową linię.
Ponadto inni będą również rejestrować swoje zegarki i różne role w tej samej bazie danych, co poniżej.
John/12/12/2012/Cleaner/20
John/12/12/2012/CEO/10
Jim/12/10/2011/Środek czyszczący/5
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
2 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Ale aby to zadziałało, musisz utworzyć unikalny indeks:
Zauważ, że musisz użyć kombinacji pól dla unikalnego indeksu, który określa, czy dwa wiersze są uważane za takie same i czy powinny zostać zastąpione, a nie wstawione.
Demo SQLFiddle
http://www.sqlfiddle.com/#!5/05b0f/2
.
Zwróć uwagę, że jeśli skomentujesz utworzenie unikalnego indeksu, to
przestanie działać poprawnie
http://www.sqlfiddle.com/#!5/6c6a0/1
.
Anonimowy użytkownik
Potwierdzenie od:
WSTAWIĆ JEŚLI NIE KOLEJNA AKTUALIZACJA?
https://coderoad.ru/3634984/
wygląda na to, że mają na to składnię: