Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql视图-选择join中的数据返回超过1行_Mysql_Sql_Database_Join_View - Fatal编程技术网

Mysql视图-选择join中的数据返回超过1行

Mysql视图-选择join中的数据返回超过1行,mysql,sql,database,join,view,Mysql,Sql,Database,Join,View,我非常感谢您对MySQL的帮助 这是我的模式的一部分,第一个表称为站点: sites.contractor链接到公司或自然人。ID公司或自然人 我正在构建一个视图,以便从这两个表中收集一些信息。 我需要将sites.latitude、sites.longitude和承包商名称companyesornaturalperson.name放入我的视图中 于是我写道: CREATE VIEW `data_entry` AS SELECT `sites`.`longitude`

我非常感谢您对MySQL的帮助

这是我的模式的一部分,第一个表称为站点:

sites.contractor链接到公司或自然人。ID公司或自然人

我正在构建一个视图,以便从这两个表中收集一些信息。 我需要将sites.latitude、sites.longitude和承包商名称companyesornaturalperson.name放入我的视图中

于是我写道:

CREATE VIEW `data_entry` AS
SELECT        
    `sites`.`longitude` AS longitude,
    `sites`.`latitude` AS latitude,

    (SELECT `companiesornaturalperson`.`name` 
        FROM  sites sites
        INNER JOIN 
            companiesornaturalperson companiesornaturalperson ON sites.contractor = companiesornaturalperson.idCompaniesOrNaturalPerson
    ) AS contractor_name

FROM sites
当我的站点表中有一行时,这工作正常,但当我有多行时,这会导致子查询返回多行错误

我明白这是因为我的加入在这些情况下带来了不止一个价值。问题是我不知道如何只返回一个值,某种类型的WHERE sites.id=站点的真实id。我做了很多搜索,但仍然无法解决它。

你能试试这个吗

CREATE VIEW `data_entry` AS
SELECT        
    `sites`.`longitude` AS longitude,
    `sites`.`latitude` AS latitude,
    `companiesornaturalperson`.`name` 
FROM sites    
INNER JOIN 
    companiesornaturalperson ON sites.contractor = companiesornaturalperson.idCompaniesOrNaturalPerson

您可以使用相关子查询(可能)执行您想要的操作:

CREATE VIEW `data_entry` AS
    SELECT s.`longitude` AS longitude,
           s.`latitude` AS latitude,
           (SELECT cnp.`name` 
            FROM companiesornaturalperson cnp 
            WHERE s.contractor = cnp.idCompaniesOrNaturalPerson
           ) AS contractor_name
    FROM sites s;
如果给定列的名称,不可能有多个匹配项,那么这仍然可能生成错误

MySQL不允许FROM子句中的子查询,但允许标量子查询

您也可以通过左连接执行此操作:


如果存在多个承包商,它应该返回什么?您是否只希望每个lat/long返回1个?每个站点只会有一个关联的承包商。是的,但我需要从companyesornaturalperson表中选择更多列:one with ON sites.contractor=companyesornaturalperson.idcompanyesornaturalperson;另一个与ON sites.land=companiesornaturalperson.idCompaniesOrNaturalPerson…我将尝试您的第一个解决方案。我不能做第二个,因为我需要从companyesornaturalperson表中选择更多的列:一个带有ON sites.contractor=companyesornaturalperson.idcompanyesornaturalperson;另一个与ON-sites.land=companiesornaturalperson.idCompaniesOrNaturalPerson…好的,第一个解决方案非常有效。谢谢你,救命恩人!
CREATE VIEW `data_entry` AS
    SELECT s.`longitude` AS longitude,
           s.`latitude` AS latitude,
           cnp.`name` as contractor_name
    FROM sites s LEFT JOIN
         companiesornaturalperson cnp 
         ON s.contractor = cnp.idCompaniesOrNaturalPerson;