* SQL错误:错误代码:1242。子查询返回超过1行

时间:2018-03-13 04:59:04

标签: 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响应错误:

  

错误代码:1242。子查询返回的行数超过1行。

现在我希望所有域名都与网站ID匹配,有人可以帮助我吗? 非常感谢,对不起我的英语非常糟糕。

3 个答案:

答案 0 :(得分:2)

其他答案建议的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
-------------+-------------------------

答案 1 :(得分:1)

您必须使用JOIN代替Sub-Query

SELECT
    w.name 'Website Name',
    D.url 'Domains URL'
FROM website w
JOIN domains D ON W.id = D.company_id

答案 2 :(得分:1)

您只需要使用域表

进行JOIN s
SELECT 
       w.name AS 'Website Name',
       d.url AS 'Domains URL'     
FROM  website w
INNER JOIN domains d ON d.company_id = w.id