2017-08-10 2 views
0

Ich habe Probleme mit einer SELECT-Abfrage, die statt mir einen einzigen Wert, gibt mir zu viele. Die Abfrage unter:Mysql SELECT-Abfrage Rückgabe doppelte Werte

  SELECT costi.id, costo, descrizione, categoria 
      FROM costi 
      INNER JOIN categorie 
      WHERE costi.id = 140 

Die Abfrage Fische Daten aus einer DB mit zwei Tabellen (costi und Kategorie) db structure

Das Problem, das ich habe, ist, dass: Wenn ich zum Beispiel laufen die Abfrage auf PHP my admin (durch Eingabe von $ _POST ['id'], die ID einer Kosten wie 140) anstatt nur eine Zeile mit den zugehörigen Daten zurückzugehen, kommt es zwei Zeilen zurück (eine für jede Kategorie I habe erstellt). query result

Sie sind identische Zeilen mit den gleichen Werten, außer für das Kategoriefeld, das unterschiedlich ist. Ich brauche nur eine Zeile mit den richtigen Daten zurück.

+1

Sie keine Bedingung spezifizieren für die Verbindung. Mit anderen Worten, Sie verpassen nach dem Join eine 'on'-Anweisung. – Utkanos

+0

Bitte geben Sie einige Bedingungen für den Beitritt an. Andernfalls wird es nur wie folgt gefüllt: –

+0

Wenn Sie keine ON-Anweisung angeben, arbeitet Ihr INNER JOIN als CROSS JOIN, macht aber Sinn, dass Sie doppelte Datensätze erhalten. Kein Körper hat erklärt, warum es passiert, also werde ich es erklären. –

Antwort

0

Sieht aus wie es sein sollte:

SELECT costi.id, costo, descrizione, categoria 
FROM costi 
INNER JOIN categorie 
    ON costi.id = categorie.id --note the join condition 
WHERE costi.id = 140 
0

auf Ihre Anfrage Ergebnis der Suche ..

Sie einen Group_concat nutzen könnten, um das Ergebnis in einer Reihe bekommen

SELECT costo, descrizione, group_concat(categoria) 
     FROM costi 
     INNER JOIN categorie 
     WHERE costi.id = 140 
group by costo, descrizione 
0

Sie Müssen die 2 Tabellen mit dem Fremdschlüssel in der JOIN-Anweisung

JOIN
SELECT costi.id, costo, descrizione, categoria 
FROM costi 
    INNER JOIN categorie ON categorie.id = costi.idcatagoria 
WHERE costi.id = 140 

Nun ist die Abfrage weiß, welche Zeilen in den zwei Tabellen beziehen sich auf die jeweils andere

0

Es können zwei Ansätze sein:

  1. Verwenden Sie die folgende Abfrage INNER JOIN vermeiden:

    SELECT h.id, h.costo, h.descrizione, i.categoria 
        FROM costi h, categorie i 
        WHERE h.id = 140 and h.idcategoria=i.id 
    
  2. Sie können GROUP BY mit INNER JOIN

  3. verwenden
+0

Warum haben Sie das JOIN-Präfix für ein UND entfernt? 2 Schritte zurück surley – RiggsFolly

+0

Sie sind im Grunde das Gleiche. Bitte beachten Sie: https: // stackoverflow.com/questions/44917/explicit-vs-implizite-sql-Joins –

+0

Aber warum ändern Sie den OP-Code für was Sie glauben, ist kein Vorteil – RiggsFolly

-1

Angabe einer Bedingung für die Verknüpfung. wie table.id auf ...

angeben Bedingung dann werden Sie nur begrenzte Ergebnisse

0

verwenden Sie die folgende Abfrage zu vermeiden INNER JOIN erhalten:

SELECT h.id, h.costo, h.descrizione, i.categoria 
    FROM costi h, categorie i 
    WHERE h.id = 140 and h.idcategoria=i.id 
+0

alten Weg zu verbinden .. Diese Methode könnte in der Zukunft veraltet sein –