2016-04-07 3 views
0

Казалось, все работает нормально, то вдруг я получаю эту ошибку на моем переднем конце:Mysql Код ошибки: 1242 Subquery возвращает более 1 ряд

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

Под Workbench каждый вид я имел созданная ранее, выдает эту ошибку: Mysql Error code: 1242 Subquery returns more than 1 row.

Ниже приведен пример одного кода, который дает ошибку.

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`))) 

Кажется, что я использую LIMIT, но не могу использовать LIMIT.

Спасибо заранее

+1

ваш 'categories' таблицы, вероятно, содержит повторяющиеся строки с одинаковыми' id'. попробуйте удалить дубликаты и сделать 'id' основным ключом – FuzzyTree

+0

Поскольку вы используете подвыбор для создания псевдо столбца, он возвращает только одно значение - столбец не может иметь более одного значения в одной строке. Если вы «не можете» использовать LIMIT, то, возможно, вы выбрали неправильный подход для начала. (Какой из них лучше подходит, сложно сказать, потому что ваш вопрос не включает в себя структуры таблиц, выборочные данные и ожидаемый результат или даже объяснение того, что вы на самом деле пытаетесь достичь здесь.) – CBroe

+0

Я с FuzzyTree Вот. Запрос выглядит отлично, поэтому он должен описывать несогласованность базы данных. –

ответ

2

Код ошибки 1242 будет возвращен, когда Ваш подзапрос возвращает более одной строки для сравнения.

Проверьте, не были ли вы вставлены какие-либо повторяющиеся данные по ошибке.

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

+0

Спасибо, один из подзапросов в 'teams_and_captains_view' возвращал повторяющиеся результаты. Я внес изменения в эту точку зрения, и теперь все работает – Heri