AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 393863
Accepted
w00t
w00t
Asked: 2012-05-31 00:52:57 +0800 CST2012-05-31 00:52:57 +0800 CST 2012-05-31 00:52:57 +0800 CST

一个查询中有多个 mysql 'select from'

  • 772

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

知道如何规避这个吗?

mysql
  • 3 3 个回答
  • 933 Views

3 个回答

  • Voted
  1. Best Answer
    Tzarium
    2012-05-31T00:56:45+08:002012-05-31T00:56:45+08:00

    您应该使用join如下语句:

    SELECT u.user_id, us.usersetting_user_id
    FROM users u
    JOIN usersettings us ON u.user_id = us.usersetting_user_id
    

    这假定 usersettings.usersetting_user_id 是对用户主键 (user_id) 的引用。具体可以在手册中找到。

    • 5
  2. Richard de Wit
    2012-05-31T01:07:53+08:002012-05-31T01:07:53+08:00

    FROM在子句中分配别名,然后使用alias.fieldname. 还有组SELECT和FROM部分

    SELECT user_id.user_id, usersetting_user_id.usersetting_user_id
    FROM users AS user_id, usersettings AS usersetting_user_id;
    
    • 2
  3. Alex Yaroshevich
    2012-05-31T04:29:12+08:002012-05-31T04:29:12+08:00

    我不建议在这样的查询中使用 Joins 或 multiple froms 因为你加载所有表然后过滤它。这就像使用 Having 而不是 Where。它与 mysql-server 版本相关,但您可以将其与 EXPLAIN(或 EXPLAIN EXTENDED)进行比较。

    在您的情况下,我建议您在 from 指令中使用一个表(例如基本表,用户),并使用 Where id=user_id 的内部查询加载其他数据。

    # query with basic table only
    SELECT
      user_id
    FROM users AS u;
    # extended query
    SELECT
      user_id,
      (SELECT usersetting_user_id
        FROM usersettings
        WHERE usersetting_user_id = u.user_id) AS usersetting_user_id
    FROM users AS u;
    

    Ps 如果您知道您的表具有相同的行数,您可以使用 Tzarium 的 Join 解决方案,但作为 INNER/LEFT/RIGHT JOIN 而不是 JOIN 或 OUTER JOIN。

    • 0

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve