2017-02-16 7 views
0

Ich habe 4 Tabellengezählte Anzahl von Instanzen für jedes Objekt in der Tabelle

code { 
id, 
name, 
fiveDigit, 
startDate, 
endDate, 
promo_code_id 
} 

promo_code { 
id, 
description, 
title, 
extraDigit, 
createdDate 
} 

company { 
id, 
name 
} 

promo_code_company { 
id, 
promo_code_id, 
company_id 
} 

ich Abfrage benötigen, die mich Liste aller Codes zurück -> Promo-Codes und ich brauche 2 zusätzliche Attribute, die mir zeigen, Anzahl der Unternehmen jeder Promocode haben und ein Attribut, das mir den Namen nur einer Firma zeigen wird * Ich muss nur eine Firma zeigen, auch wenn Promo-Code mehr als eine Firma haben.

Ich weiß, wie man diesen Tabellen beitreten kann, um alle Informationen zu bekommen, aber ich habe keine Ahnung, wie ich NumberOfCompanies für jeden Promo-Code bekommen kann. Ich erwarte Antwort so etwas wie dieses:

name    fiveDigit   title   numberOfComapnies companyName 
super code  12345   some title   11    sample 

Ich habe bereits versucht, so etwas wie dieses

SELECT pc.id, c.id 
count(pc.id) numberOfComapnies, 
FROM code c 
LEFT OUTER JOIN promo_code pc ON pc.Id=c.promo_code_id 
LEFT OUTER JOIN promo_code_company pcc ON pcc.promo_code_id = pc.Id 
LEFT OUTER JOIN company co on co.id = pcc.company_id 
GROUP BY pc.Id, c.id 

Wenn ich tun, dass ich Liste der Promo-Codes zu bekommen, aber ich numberOfCompanies 1 auf jedem Gutscheincode zu erhalten. Grundsätzlich muss ich in vielen zu vielen Tabelle Promo_code_company zählen, aber ich bin mir nicht sicher, wie man das macht. Und wenn ich von GROUP BY ein Feld zu entfernen i erhalten Fehler wie diese

in der GROUP BY-Klausel erscheinen müssen oder in einer Aggregatfunktion verwendet werden

EDIT: Also habe ich die Abfrage der Arbeit, und jetzt im frage mich, wie ich Name von 1 Firma schreiben kann, wenn ich zum Beispiel c.id wähle, dann funktioniert mein Zählen nicht, also brauche ich eine Möglichkeit, nur einen Firmennamen zu schreiben, zum Beispiel den ersten, irgendwelche Vorschläge?

+0

'count (c.id)' anstelle von 'count (pc.id)' –

+0

ich bekomme immer noch 2 gleiche codes aber mit verschiedenen comapnies und mit numbeerOfCompanies 1 für jeden ... –

Antwort

0
SELECT pc.id, pc.name, pc.description, c.name 
MAX(co.name) companyName, 
count(pc.id) numberOfComapnies, 
FROM code c 
LEFT OUTER JOIN promo_code pc ON pc.Id=c.promo_code_id 
LEFT OUTER JOIN promo_code_company pcc ON pcc.promo_code_id = pc.Id 
LEFT OUTER JOIN company co on co.id = pcc.company_id 
GROUP BY pc.id, c.id 

Dies ist eine Lösung für den Fall, dass sie jemals benötigt wird.

Verwandte Themen