mysql - *SQL 错误 : Error Code: 1242. 子查询返回多于 1 行

标签 mysql sql

我有一个数据库有 2 个表 websitedomains,一个网站可以存储多个域,我正在创建一个 view:

create view website_infor
as
select
    w.name 'Website Name',
    (
        select url
        from domains
        where company_id = w.id
    )
    'Domains URL'
from
    website w;

并且 SQL 响应错误:

Error Code: 1242. Subquery returns more than 1 row.

现在我想获取所有域与网站 ID 的匹配,有人可以帮助我吗? 非常感谢,抱歉我的英语太差了。

最佳答案

其他答案建议的 JOIN 将为每个网站返回多行数据(每个域一个)。如果您只想为每个网站获取一行数据,请改用 GROUP_CONCAT

create view website_infor
as
select
    w.name 'Website Name',
    (
        select GROUP_CONCAT(url)
        from domains
        where company_id = w.id
    )
    'Domains URL'
from
    website w;

例如,如果您有一个引用 example.net 和 example.com 的网站示例,JOIN 将返回两行:

Website Name | Domains URL
-------------|------------
example      | example.net
-------------|------------
example      | example.com
-------------+------------

GROUP_CONCAT 将返回一行:

Website Name | Domains URL
-------------|-------------------------
example      | example.net, example.com
-------------+-------------------------

关于mysql - *SQL 错误 : Error Code: 1242. 子查询返回多于 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49248588/

相关文章:

sql - 没有证书的 MS SQL 列加密

mysql - Sequelize 查询,使用提供的值和表行值实现计算

简单选择查询的 MySQL 性能问题

mysql - 基本 SQL Sum、Select、WHERE、GROUP BY 语句

php - 在大数据集上运行whereHas laravel方法会导致mysql崩溃

mysql - 在mysql查询中找到多行的最大列集

mysql - 在 MySql 中表现为文本的长文本

SQL - 如果 Select 什么都不返回,则执行另一个 Select

java - 通过不在 java 中工作来排序

sql - 根据条件用另一个表的列更新列值