SELECT (SELECT user_id FROM users WHERE user_id=1) AS user_id, (SELECT usersetting_user_id FROM usersettings WHERE usersetting_user_id=1) AS usersetting_user_id;
这返回:
| user_id | usersetting_user_id |
| 1 | 1 |
但我想显示所有用户,而不仅仅是一个。所以我运行以下命令:
SELECT (SELECT user_id FROM users) AS user_id, (SELECT usersetting_user_id FROM usersettings) AS usersetting_user_id;``
并得到:
ERROR 1242 (21000): Subquery returns more than 1 row
知道如何规避这个吗?
您应该使用
join
如下语句:这假定 usersettings.usersetting_user_id 是对用户主键 (user_id) 的引用。具体可以在手册中找到。
FROM
在子句中分配别名,然后使用alias.fieldname
. 还有组SELECT
和FROM
部分我不建议在这样的查询中使用 Joins 或 multiple froms 因为你加载所有表然后过滤它。这就像使用 Having 而不是 Where。它与 mysql-server 版本相关,但您可以将其与 EXPLAIN(或 EXPLAIN EXTENDED)进行比较。
在您的情况下,我建议您在 from 指令中使用一个表(例如基本表,用户),并使用 Where id=user_id 的内部查询加载其他数据。
Ps 如果您知道您的表具有相同的行数,您可以使用 Tzarium 的 Join 解决方案,但作为 INNER/LEFT/RIGHT JOIN 而不是 JOIN 或 OUTER JOIN。