mysql - 如何克服MySQL 'Subquery returns more than 1 row'错误并选择所有相关记录

标签 mysql subquery mysql-error-1242

创建表

CREATE TABLE `users` (
  `id` INT UNSIGNED NOT NULL,
  `name` VARCHAR(100) NOT NULL,
  PRIMARY KEY(`id`)
);

CREATE TABLE `email_address` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` INT UNSIGNED NOT NULL,
  `email_address` VARCHAR(50) NOT NULL,
  INDEX pn_user_index(`user_id`),
  FOREIGN KEY (`user_id`) REFERENCES users(`id`) ON DELETE CASCADE,
  PRIMARY KEY(`id`)
);

数据插入

INSERT INTO users (id, name) VALUES (1, 'Mark'), (2, 'Tom'), (3, 'Robin'); 

INSERT INTO email_address (user_id, email_address) VALUES 
(1, 'mark@gmail.com'), (1, 'mark@yahoo.com'), (1, 'mark@msn.com'), 
(2, 'tom@gmail.com'), (2, 'tom@yahoo.com'), (2, 'tom@msn.com'),
(3, 'robin@gmail.com'), (3, 'robin@yahoo.com'), (3, 'robin@msn.com');

SQL查询

SELECT usr.name AS name
     , (SELECT email.email_address 
          FROM email_address AS email 
       WHERE email.user_id = usr.id) AS email 
  FROM users AS usr;    

使用上面的 MySQL 查询,如何避免 MySQL 错误“Subquery returns more than 1 row”并为特定用户选择所有相关的电子邮件地址,如下所示。谢谢。

+----------+-------------------------------------------------+
|   name   |                     email                       |
+----------+-------------------------------------------------+
|   Mark   | mark@gmail.com, mark@yahoo.com, mark@msn.com    |
|   Tom    | tom@gmail.com, tom@yahoo.com, tom@msn.com       |
|   Robin  | robin@gmail.com, robin@yahoo.com, robin@msn.com |                   
+----------+----------+--------------------------------------+

最佳答案

GROUP_CONCATSEPARATOR 并稍微简化您的查询:

SELECT users.name AS name,
(SELECT GROUP_CONCAT(email_address.email_address SEPARATOR ', ')
FROM email_address
WHERE email_address.user_id = users.id) AS email
FROM users

引用:https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

关于mysql - 如何克服MySQL 'Subquery returns more than 1 row'错误并选择所有相关记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41435472/

相关文章:

MySQL按日期分组,不存在则强制返回空值

MySQL:子查询返回多行

php - Mysql 查询 : error that says subquery returns more than 1 row

mysql - 使用sql计算多年的多个月平均值

java - JPA 实体连接组合键上的列,日期作为 PK 之一

postgresql - 是否缓存了 PostgreSQL 子查询/CTE?

Mysql Case 返回错误值

php - 存储过程错误 :Subquery returns more than 1 rows

MySQL 更新有两个子查询

php - 单个mysql查询根据选择另一个表的数量来更新数量