/ / Dwa połączenia tabel dla jednego zapytania - mylące wyniki - mysql, sql

Dwa połączenia tabel dla jednego zapytania - mylące wyniki - mysql, sql

Próbuję wykonać dwa oddzielne sprzężenia wewnątrz tabeli w moim kwerendy, aby zwrócić wartości z dwóch tabel.

    SELECT pname, avg(salary)
FROM project p INNER JOIN department d on p.dnum = d.dnumber
INNER JOIN employee e ON e.dno = d.dnumber;

Otrzymuję jeden wiersz w zestawie wyników ... pname = null, avg (salary) = null. Zestaw wyników powinien zawierać 11 wierszy, ponieważ w schemacie jest 11 projektów.

Czy ktoś może wskazać mi właściwy kierunek?

Dziękuję Ci

Odpowiedzi:

2 dla odpowiedzi № 1

Brakuje Ci group by:

SELECT pname, avg(salary)
FROM project p INNER JOIN
department d
on p.dnum = d.dnumber INNER JOIN
employee e
ON e.dno = d.dnumber
GROUP BY pname;

W większości baz danych twoja wersja zawiedzie z oczywistym błędem składni. MySQL wymusza tylko standard ANSI, jeśli używasz ONLY_FULL_GROUP_BY tryb (patrz tutaj).


0 dla odpowiedzi nr 2

Użyj lewego łączenia zewnętrznego zamiast połączenia wewnętrznego Czy możesz pokazać mi swoje tabele danych


0 dla odpowiedzi № 3

Czy potrzebujesz department tabela w zapytaniu?

Czy następujące zapytanie zwraca wszystkie dane, które należy podsumować?

SELECT pname, salary
FROM ( SELECT salary, dno AS dnum FROM employee ) e
NATURAL JOIN project;

Jeśli tak, to może wymagać podsumowania:

SELECT pname, AVG( salary ) AS average_salary
FROM ( SELECT salary, dno AS dnum FROM employee ) e
NATURAL JOIN project
GROUP
BY pname;