• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Usuniecie elementu z tabeli mającej połączenie z 3 innymi tabelami

HackNation - ogólnopolski hackathon
0 głosów
399 wizyt
pytanie zadane 11 września 2018 w SQL, bazy danych przez Kamyyylo Początkujący (460 p.)

Chciałbym usunąć element z bazy o JOB_ID=1. jednak ma on użycie w tabeli order details przez co nie mogę normalnie tego usunąć. aby zobrazować problem podsyłam kawałek diagramu ERD i kod SQL, który napisałem ale wyskakuje błąd "not a group by expression" i nie wiem jak go naprawić

Kod:

DELETE FROM ORDER_DETAILS WHERE ORDER_ID IN (SELECT ORDER_ID FROM ORDERS HAVING EMPLOYEE_ID IN (SELECT EMPLOYEE_ID FROM EMPLOYEES HAVING JOB_ID=1));

DELETE FROM ORDERS WHERE EMPLOYEE_ID IN (SELECT EMPLOYEE_ID FROM EMPLOYEES HAVING JOB_ID=1);

DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID=1;

DELETE FROM JOBS WHERE JOB_ID=1;

Diagram ERD:

1 odpowiedź

0 głosów
odpowiedź 11 września 2018 przez tylko_jedno_pytanie Użytkownik (580 p.)
wybrane 11 września 2018 przez Kamyyylo
 
Najlepsza

Wydaje mi się, że błąd ,który widzisz na konsoli spowodowany jest błędem w warunku.

Linia 1 

WHERE ORDER_ID IN (SELECT ORDER_ID FROM ORDERS HAVING EMPLOYEE_ID IN (SELECT EMPLOYEE_ID FROM EMPLOYEES HAVING JOB_ID=1))

Zamieniłbym HAVING Na WHERE , gdyż nie jest to zapytanie grupujące 

Linia 3 - ten sam błąd 

WHERE EMPLOYEE_ID IN (SELECT EMPLOYEE_ID FROM EMPLOYEES HAVING JOB_ID=1);

Podmień na WHERE i daj znać czy działa :)

komentarz 11 września 2018 przez Kamyyylo Początkujący (460 p.)

Działa :D Super dzięki za pomoc.

A mam jeszcze jedno pytanie co do UPDATE. mam podobną sytuacje gdyż gdy chce zaktualizowac dane w tabeli JOBS to musze tez zmienic wartosc klucza obcego w tabeli EMPLOYEES. wymysliłem taki sposób:

UPDATE EMPLOYEES SET JOB_ID=NULL WHERE JOB_ID=1; 
UPDATE JOBS SET JOB_ID=16,JOB_TITLE='FFSDERESDF',EMPLOYMENT_FORM=.5 WHERE JOB_ID=1;
UPDATE EMPLOYEES SET JOB_ID=16 WHERE JOB_ID=NULL;

Problem jest taki że w tym wypadku musiałem usunąć "NOT NULL" z klucza obcego, a chce żeby akurat ta wartość była zawsze wpisana. plus kolejnym problemem jest to że jeśli ktoś zostawi wartość JOB_ID w kluczu obcym na NULL to przy zaktualizowaniu zaktualizują się wartości, których nie chcieliśmy zmienić

komentarz 12 września 2018 przez tylko_jedno_pytanie Użytkownik (580 p.)

Nie bardzo rozumiem co chcesz zrobić w tym przykładzie 

Jeśli chcesz aby stanowisko na którym znajdują się pracownicy z job_id = 1 nazywało się FFSDERESDF oraz miało parametr EMPLOYMENT_FORM=5 , wystarczy samo 

UPDATE JOBS SET JOB_TITLE = 'FFSDERESDF', EMPLOYMENT_FORM=5 WHERE JOB_ID = 1

Jeśli natomiast chciałeś aby byli zatrudnieni przez jakiś inny, nowy dział - należałoby utworzyć nowy rekord w tabeli JOBS

INSERT INTO JOBS (JOB_ID, JOB_TITLE, EMPLOYMENT_FORM) VALUES (16, 'nazwa nowego działu', 5)

A następnie wykonać prostą podmianę 

UPDATE EMPLOYEES SET JOB_ID=16 WHERE JOB_ID=1;

Mam nadzieję ,że pomogłem 

Jeśli masz dodatkowe pytania lub chcesz jakoś bardziej nakreślić cel , do którego dążysz, napisz proszę na priv 

 

komentarz 12 września 2018 przez Kamyyylo Początkujący (460 p.)
Chodzi mi o to że  chciałbym zmienić wartość job id na inną np z 1 na 16

Podobne pytania

0 głosów
2 odpowiedzi 414 wizyt
pytanie zadane 14 stycznia 2023 w SQL, bazy danych przez haitoke Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 516 wizyt
pytanie zadane 18 stycznia 2020 w Nasze poradniki przez oracledev Użytkownik (620 p.)
0 głosów
0 odpowiedzi 212 wizyt
pytanie zadane 27 maja 2022 w SQL, bazy danych przez Hardwell Dyskutant (9,060 p.)

93,625 zapytań

142,548 odpowiedzi

323,034 komentarzy

63,129 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1210p. - dia-Chann
  2. 1197p. - DziarnowskiJ
  3. 1177p. - Łukasz Piwowar
  4. 1172p. - CC PL
  5. 1161p. - Maurycy W
  6. 1141p. - Adrian Wieprzkowicz
  7. 1138p. - raydeal
  8. 1134p. - Tomasz Bielak
  9. 1116p. - rucin93
  10. 1101p. - robwarsz
  11. 1100p. - Mariusz Fornal
  12. 1024p. - ssynowiec
  13. 885p. - Dominik Łempicki (kapitan)
  14. 847p. - Grzegorz Aleksander Klementowski
  15. 838p. - Wojciech Malicki
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...