2016-04-07 14 views
0

Alles schien in Ordnung zu arbeiten, dann ganz plötzlich erhalte ich diesen Fehler auf meinem Front-End:Mysql Fehlercode: 1242 Subquery liefern mehr als 1 Zeile

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row' in /var/www/html/system/home.php:78 Stack trace: #0 /var/www/html/system/home.php(78): PDOStatement->execute() #1 {main} thrown in /var/www/html/system/home.php on line 78

Unter Workbench jede Ansicht Ich hatte erstellt zuvor gibt diesen Fehler aus: Mysql Error code: 1242 Subquery returns more than 1 row.

Hier ist ein Beispiel für einen Code, der den Fehler gibt.

SELECT 
    `teams`.`id` AS `id`, 
    `teams`.`name` AS `team_name`, 
    `teams_and_captains_view`.`captain` AS `captain`, 
    IF((`teams`.`gender` = 'M'), 
     'Male', 
     'Female') AS `gender`, 
    (SELECT 
      `categories`.`name` 
     FROM 
      `categories` 
     WHERE 
      (`categories`.`id` = `teams`.`category_id`)) AS `category`, 
    `teams`.`category_id` AS `category_id`, 
    `teams`.`slogan` AS `slogan`, 
    `teams`.`location` AS `location`, 
    `teams`.`description` AS `description`, 
    `teams`.`phone` AS `phone`, 
    `teams`.`email` AS `email`, 
    `teams`.`tournament_id` AS `tournament_id`, 
    (SELECT 
      COUNT(`players`.`id`) 
     FROM 
      `players` 
     WHERE 
      (`players`.`team_id` = `teams`.`id`)) AS `players`, 
    `teams_and_captains_view`.`captain_id` AS `captain_id` 
FROM 
    (`teams` 
    LEFT JOIN `teams_and_captains_view` ON ((`teams`.`id` = `teams_and_captains_view`.`id`))) 

Es scheint zu funktionieren, wenn ich LIMIT verwende, aber ich kann LIMIT nicht verwenden.

Vielen Dank im Voraus

+1

Ihre 'categories' Tabelle enthält wahrscheinlich doppelte Zeilen mit dem gleichen' id'. Versuchen Sie, die Duplikate zu entfernen und "id" zu einem Primärschlüssel zu machen – FuzzyTree

+0

Da Sie die Unterauswahl verwenden, um eine Pseudospalte zu erstellen, muss __must__ nur einen Wert zurückgeben - eine Spalte darf nicht mehr als einen Wert in einer einzelnen Zeile haben. Wenn Sie "LIMIT" nicht verwenden können, haben Sie möglicherweise den falschen Ansatz gewählt. (Welche wäre besser geeignet, ist schwer zu sagen, weil Ihre Frage weder Tabellenstrukturen, Beispieldaten und erwartete Ausgabe enthält, noch eine Erklärung, was Sie hier eigentlich erreichen wollen.) – CBroe

+0

Ich bin mit FuzzyTree Hier. Die Abfrage sieht gut aus, daher muss die Datenbankinkonsistenz beschrieben werden. –

Antwort

2

Fehlercode 1242, wenn Ihre Unterabfrage gibt mehr als eine Zeile zum Vergleich zurückgeschickt werden.

Bitte überprüfen Sie, ob Sie irrtümlich doppelte Daten eingefügt haben.

http://dev.mysql.com/doc/refman/5.7/en/subquery-errors.html

+0

Danke, eine der Unterabfragen in 'teams_and_captains_view' hat doppelte Ergebnisse zurückgegeben. Ich habe in dieser Hinsicht Änderungen vorgenommen und alles funktioniert jetzt – Heri

Verwandte Themen