2017-03-17 5 views
0

MySQLのヘルプに感謝します。ここでMysqlビュー - ジョインのデータを選択すると1行以上が返されます

は私のスキーマの一部(最初のテーブルは、「サイト」と呼ばれている)である。 db_schema

sites.contractorは私がするために、ビューを構築していますcompaniesornaturalperson.idCompaniesOrNaturalPerson

にリンクされています2つのテーブルからいくつかの情報を収集します。 sites.latitude、sites.longitude、請負業者の名前(enterprisesornaturalperson.name)を私の見解に入れる必要があります。

は、だから私は書きました:私は私のサイトのテーブル内の1つの行を持っている場合は、これがうまく機能している

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 

が、私は私が「サブクエリが1つの以上の行を返す」につながる行、より多くを持っている場合エラー。

私の参加がこれらのケースで複数の価値をもたらしていることがわかった。問題は、値を1つだけ返す方法がわからないことです(何らかの「WHERE sites.id =サイトの実際のID」)。私は多くの検索をしましたが、まだ解決できません。

+0

複数の請負業者が存在する場合、それは何を返すべき?緯度/経度ごとに1を返すだけですか? – sgeddes

+0

各サイトに関連付けられている請負業者は1つだけです。 – Max

答えて

0

あなたがやりたいことができます - おそらく - 相関サブクエリで:

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句にサブクエリを使用できませんが、スカラーサブクエリは許可されています。

またLEFT JOINでこれを行うことができます。

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; 
+0

の他の1つは、あなたの最初の解決策を試してみます。私は2番目の作業を行うことができません。なぜなら、「企業の職員」テーブルから選択肢に列を追加する必要があるからです.1つはON sites.contractor = companiesornaturalperson.idCompaniesOrNaturalPersonで、もう1つはON sites.landlord = companiesornaturalperson.idCompaniesOrNaturalPerson ... – Max

+0

です。最初の解決策はうまくいきます。命の恩人ありがとう! – Max

0

あなたはこれを試すことができますか?

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 
+0

はい、私は、 "enterprisesornaturalperson"テーブルから選択肢に多くの列を持たせる必要があります:ON sites.contractor = companiesornaturalperson.idCompaniesOrNaturalPerson; ON sites.landlord = companiesornaturalperson.idCompaniesOrNaturalPerson ... – Max

関連する問題