2017-02-11 3 views
0

Ich habe vor kurzem MySQL gelernt und mich gefragt, ob jemand mir bei diesem Problem helfen könnte an dem ich arbeite ..MySQL Advance-Joins

Ich habe zwei Tabellen,

Zuerst ist ein departmentTable

+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Department | Employee1 | Employee2 | Employee3 | Employee4 | Employee5 | Employee6 | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Finance | Tim C  | Nora C | Susan P | Martin S | Donal D | Zita P | 
| HR   | Yvonne S | Marcus F | Mark B | Peter S | Ola G  | Gina P | 
| IT   | John W | Matt R | Paul M | Tom Y  | Jean S | Martin T | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 

Zweitens ist eine EmployeeDetails Tabelle

+--------------+-------+------------+--------+ 
| EmployeeName | Shift | Employment | Salary | 
+--------------+-------+------------+--------+ 
| Donal D  | Night | Full  | 30000 | 
| Gina P  | Night | Part  | 21000 | 
| Jean S  | Night | Full  | 30000 | 
| John W  | Night | Full  | 24000 | 
| Marcus F  | Night | Full  | 21000 | 
| Mark B  | Day | Full  | 23000 | 
| Martin S  | Day | Full  | 23400 | 
| Martin T  | Day | Part  | 31000 | 
| Matt R  | Day | Full  | 22000 | 
| Nora C  | Day | Full  | 22000 | 
| Ola G  | Night | Full  | 21400 | 
| Paul M  | Day | Part  | 23000 | 
| Peter S  | Day | Part  | 25000 | 
| Susan P  | Day | Part  | 23000 | 
| Tim C  | Day | Full  | 24000 | 
| Tom Y  | Day | Full  | 23400 | 
| Yvonne S  | Day | Full  | 24000 | 
| Zita P  | Night | Part  | 31000 | 
+--------------+-------+------------+--------+ 

ich versuche, einen Weg zu finden, wenn es möglich ist, eine Abfrage zu haben, die findet, welche Abteilung 4 Tage- und 2 Nachtschicht-Angestellte hat. so ist es ausgeben soll so etwas wie diese ..

+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Department | Employee1 | Employee2 | Employee3 | Employee4 | Employee5 | Employee6 | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Finance | Tim C  | Nora C | Susan P | Martin S | Donal D | Zita P | 
| IT   | John W | Matt R | Paul M | Tom Y  | Jean S | Martin T | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 

Jede Hilfe dankbar, ich weiß, es ist nicht der beste Weg, um Daten zu speichern und abzurufen sie, aber ich versuche, zu verstehen und erfahren Sie mehr über Verknüpfungen und zählt in MySQL .

+3

Ihre Tabellenstruktur Fix. Mitarbeiter in einer Spalte speichern – GurV

+0

Ich behandle ein Schulungsmaterial, das die obige Datenstruktur vorschlägt. also versuche ich nur zu verstehen ob es überhaupt möglich ist – tom1123

+0

Bitte zuerst deine Datenbank normalisieren bevor du eine Vorausanfrage abgibst. Sonst verschwendet es deine Zeit und dein Talent. – Imran

Antwort

0

Sie sollten Ihre Tabellenstruktur reparieren, indem Sie Mitarbeiter in einer Spalte speichern.

Mit dieser sagte, Sie dies versuchen könnte:

select 
    d.* 
from departmentTable d 
join employeeDetails e on e.EmployeeName in (
    d.Employee1, d.Employee2, d.Employee3, 
    d.Employee4, d.Employee5, d.Employee6 
) 
group by d.department 
having sum(e.shift = 'Night') = 2 
and sum(e.shift = 'Day') = 4 
+0

das funktionierte wie ein Charme .. Vielen Dank für Ihre Hilfe, der Online-Kurs, den ich mache, konzentriert sich sehr auf diese Vorausfragen, bevor Sie die Datenbank normalisieren. Aber vielen Dank für Ihre Hilfe – tom1123

0

Sie sollten lieber eine Tabelle verwenden, in der Sie alle Mitarbeiter mit ihren Details speichern und dort ein Detail hinzufügen, das auf eine Abteilung verweist. Verwenden Sie niemals Ihren Ansatz mit employee1-n.

Auch wenn ich sehe, dass Nora C in zwei Abteilungen vorhanden ist, vielleicht werfen Sie einen Blick auf m-n-Beziehungen. Google ist dein Freund

+0

Also sieht aus wie es war Kopieren und Einfügen Tippfehler .. es hätte Marcus F. sein sollen. Habe irgendwie stecken geblieben, daher entschied ich mich zu fragen .. Ich werde immer noch davon abschneiden .. danke – tom1123