Zapytanie - porównanie 2 tabel

0

Witajcie,

Mam 3 tabele:
sprzet: id_sprzetu, nazwa, indeks, JIM, ilosc
pomieszczenia: id_pomieszczenia, nr_pomieszczenia, opis
lok_sprzetu: id_l_s, id_sprzet, id_pom, iloscloksprzetu, uwagi

W tabeli sprzet mam informacje ile sprzętu i w jakiej ilości mam na stanie (obciążeniu).
W tabeli lok_sprzetu mam dane jaki sprzęt w jakiej ilości znajduje sie w danym pomieszczeniu.

Teraz chciałbym zbudowac zapytanie z którym mam problem, żeby porównac czy mam zgodnośc z ilością sprzetu z obciążenia (tabela sprzet) a tym co jest w pomieszczeniach.
Np: w tabeli sprzet mam 22 szt. komputerów na stanie a w pomieszczeniach: nr 12 - 1, nr 22 - 12. Lub jakieś ewentualne nadstany. Muszę zbudowac tabelę (php, html) w której bedą wyniki: braki, nadwyżka.

0

select. from (select idsprzetu, sum(uloscloksprzetu) razem from lok_sprzetu group by 1) x join sprzet s on s.idsprzetu = x.idsprzetu where razem<>s.ilosc

0
 
        SELECT  FROM (SELECT id_sprzet, SUM( iloscloksprz ) razem FROM lok_sprzetu, GROUP  BY 1 )x JOIN sprzet s ON s.id_sprzetu = x.id_sprzetWHERE razem <> s.ilosc

#1064 - You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'FROM ( SELECT id_sprzet , SUM( iloscloksprz ) razem FROM
lok_sprzetu , GROUP BY ' at line 1

0

Pomyślałeś choć trochę, czy bezmyślnie klepnąłeś kod?

  1. Brak pól po SELECT
  2. Brak spacji przed WHERE
  3. Niepotrzebny przecinek
0

Do zamotania jeden krok...
Teraz kod wygląda tak:

 SELECT nazwa, ilosc, razem FROM (SELECT id_sprzet, SUM( iloscloksprz ) razem FROM jos_lok_sprzetu GROUP  BY 1 ) x JOIN jos_sprzet s ON s.id_sprzetu = x.id_sprzet WHERE razem <> s.ilosc

Mam wynik w postaci tabeli - 3 kolumny:
nazwa sprzętu, ilosc (ta z obciążenia czyli to co mam na stanie) i kolumna razem czyli jak rozumiem suma sprzetu jaka znajduje się w pomieszczeniach.

0

I co? Odejmować nie umiesz?
Poz tym wydaje mi się, że powinieneś zrobić LEFT/RIGHT/FULL JOIN, bo może się okazać, że z którejś strony masz "wolne" rekordy.

0

Dzięki bardzo za pomoc, nie bardzo wiem jak jednak jak zrobić jeszcze ten select z odejmowaniem :)

1
SELECT nazwa, ilosc, razem, Coalesce(ilosc,0)-Coalesce(razem,0) roznica FROM jos_sprzet s LEFT JOIN (SELECT id_sprzet, SUM( iloscloksprz ) razem FROM jos_lok_sprzetu GROUP  BY 1 ) x ON s.id_sprzetu = x.id_sprzet WHERE razem <> s.ilosc
0

Kurcze, super:) Naprawdę wielkie dzięki. Podaj adres na priv to wysyłam dobrą flaszkę :)

0

Witam,

Mam jeszcze jedno pytanie.
Jak mógłbym otrzymać informacje na podstawie tych 3 tabel - jaka ostatnia operacja została przeprowadzona w bazie danych tzn. delete, update, insert - czego dotyczyła i kiedy to miało miejsce?

0

Trigger on update, insert, delete. plus zapis do nowej tabeli odpowiednich informacji.

0

Czyżby tabela historyczna dla tabeli lok_sprzetu taką miałaby mieć postać?

CREATE TRIGGER `lok_sprzetu_history_update_trigger` BEFORE UPDATE ON `lok_sprzetu`
FOR EACH ROW BEGIN
    INSERT INTO `lok_sprzetu_history` (id,id_sprzet,id_pom,iloscloksprz,id_miary,uwagi,change_type,change_date) 
    VALUES
    (OLD.id,OLD.id_sprzet,OLD.id_pom,OLD.iloscloksprz,OLD.id_miary,OLD.uwagi,0,NOW());
END; 
0
kmpl napisał(a):

Witajcie,

Mam 3 tabele:
sprzet: id_sprzetu, nazwa, indeks, JIM, ilosc
pomieszczenia: id_pomieszczenia, nr_pomieszczenia, opis
lok_sprzetu: id_l_s, id_sprzet, id_pom, iloscloksprzetu, uwagi

W tabeli sprzet mam informacje ile sprzętu i w jakiej ilości mam na stanie (obciążeniu).
W tabeli lok_sprzetu mam dane jaki sprzęt w jakiej ilości znajduje sie w danym pomieszczeniu.

Teraz chciałbym zbudowac zapytanie z którym mam problem, żeby porównac czy mam zgodnośc z ilością sprzetu z obciążenia (tabela sprzet) a tym co jest w pomieszczeniach.
Np: w tabeli sprzet mam 22 szt. komputerów na stanie a w pomieszczeniach: nr 12 - 1, nr 22 - 12. Lub jakieś ewentualne nadstany. Muszę zbudowac tabelę (php, html) w której bedą wyniki: braki, nadwyżka.

SELECT nazwa, ilosc, razem, COALESCE(ilosc,0)-COALESCE(razem,0) roznica FROM jos_sprzet s LEFT JOIN (SELECT id_sprzet, SUM( iloscloksprz ) razem FROM jos_lok_sprzetu GROUP BY 1 ) x ON s.id_sprzetu = x.id_sprzet WHERE razem <> s.ilosc

Jakiś czas temu miałem problem ze stworzeniem raportu - porównania o zgodności sprzetu bedącego na moim obciążeniu z tym co jest w pomieszczeniach. Po pewnym czasie dostrzegłem błąd iż w raporcie w kolumnie nazwa sprzętu nie są wszystkie dane z tabeli sprzęt a być powinny żeby je porównać z tym co jest w pomieszczeniach.
Coś nie tak z zapytaniem?

http://4programmers.net/Forum/Bazy_danych/222593-zapytanie_-_porownanie_2_tabel

1 użytkowników online, w tym zalogowanych: 0, gości: 1