• 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

Aruba Cloud - Virtual Private Server VPS
0 głosów
296 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 284 wizyt
pytanie zadane 14 stycznia 2023 w SQL, bazy danych przez haitoke Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 469 wizyt
pytanie zadane 18 stycznia 2020 w Nasze poradniki przez oracledev Użytkownik (620 p.)
0 głosów
0 odpowiedzi 157 wizyt
pytanie zadane 27 maja 2022 w SQL, bazy danych przez Hardwell Dyskutant (8,980 p.)

93,335 zapytań

142,330 odpowiedzi

322,409 komentarzy

62,670 pasjonatów

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...