2017-05-30 2 views
0

Ich habe die 2 üblichen Tabellen, Produkte und Kategorien, und wegen der Viele-zu-Viele-Beziehung habe ich eine Schlüsselzuordnungstabelle erstellt, die beide verbindet. Diese assoziative Tabelle ist zum Beispiel wie folgt aus:Abfrage von Produkten, Kategorien über die assoziative Tabelle

id product_id category_id 
1  2   4 
2  2   6 
3  3   4 
etc 

, wo sie die Fremdschlüssel an die jeweiligen product_id und category_id Primärschlüssel sind.

So jetzt versuche ich eine Abfrage zu Testergebnissen zu schreiben. Normalerweise möchte ich, dass einige Produkte einer bestimmten Kategorie angezeigt werden. Aber ich habe mehrere Abfragen ausprobiert, aber es sagt mir, dass ich einen Fehler in der MySQL-Syntax habe.

select products.name 
from products 
join producto-categoria 
on producto-categoria.product_id = products.id 
join categorias 
on producto-categoria.category_id = categorias.id 
where categorias.id = 3 
limit 100 

Ich habe tatsächlich zunächst die Struktur in phpMyAdmin und lud dann die entsprechenden CSV-Dateien und dann schließlich verknüpfen sie durch ihre FK in der assoziativen Tabelle erstellten Indizes mit (auch Schlüsselzuordnungstabelle genannt), und ich habe nicht irgendein Fehler beim Erstellen der FK-Links. InnoDB als Engine.

+2

Ihre Tabellen umbenennen, so dass sie in ihnen haben keine Bindestriche. –

Antwort

0

Umbenennen producto-categoria zu productocategoria. Der Bindestrich verursacht einen Syntaxfehler, da er als Minuszeichen interpretiert wird. Sie können den Namen auch umgehen, aber es ist besser, wenn Sie "einfache" Namen anstelle von Namen verwenden, die nicht standardmäßige Zeichen enthalten.

Dann noch zwei weitere Dinge:

  • Verwenden Sie Tabelle Tabelle Aliase.
  • Entfernen Sie die Verbindung zu categorias, weil die Tabelle nicht verwendet wird.

So:

select p.name 
from products p join 
    productocategoria pc 
    on pc.product_id = p.id 
where pc.category_id = 3 
limit 100 
+0

danke! Ich muss 10 Minuten warten, bevor ich es genehmigen kann. Sie sind völlig richtig in Ihren Punkten. Der Bindestrich ließ mich vermuten, aber es weckte mich nicht vollständig auf. Richtig auch über die Aliase, – Arminius

+1

Ich werde dein Buch kaufen. Der Titel ist sehr interessant und ich versuche tatsächlich, sql zu verwenden, um Verkaufsberichte zu erstellen. Definitiv ein Muss für mich. – Arminius

Verwandte Themen