【发布时间】:2016-04-07 19:44:02
【问题描述】:
一切似乎都运行良好,然后突然间我的前端出现了这个错误:
致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[21000]:基数违规:1242 子查询返回更多 /var/www/html/system/home.php:78 中的多于 1 行 堆栈跟踪:#0 /var/www/html/system/home.php(78): PDOStatement->execute() #1 {main} 在第 78 行的 /var/www/html/system/home.php 中抛出
在 Workbench 下,我之前创建的每个 VIEW 都发出此错误: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。
提前谢谢你
【问题讨论】:
-
您的
categories表可能包含具有相同id的重复行。尝试删除重复项并将id设为主键 -
由于您使用子选择创建一个伪列,它必须只返回一个值——一列在一行中不能有多个值。如果你“不能”使用 LIMIT,那么你可能一开始就选择了错误的方法。 (哪个更适合,很难说,因为您的问题既不包括表结构、样本数据和预期输出,也不包括您在此处实际尝试实现的目标的解释。)
-
我在这里是 FuzzyTree。查询看起来很好,所以它一定是描述的数据库不一致。
标签: php mysql database left-join cardinality