我有一个数据库有2个表website
和domains
,一个网站可以存储多个域名,我创建了一个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匹配,有人可以帮助我吗? 非常感谢,对不起我的英语非常糟糕。
答案 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