0

誰かがここで私を助けてくれませんか、アイブ・ググって、このエラーで他の例を見ましたが、それは私を混乱させるだけで、これについて頭を悩ませているようです.

mysqlクエリでデータを他のものとして選択するのに苦労しています。次のエラーが表示されます...

Operand should contain 1 column(s)

オペランドの簡略化された用語は何ですか?

以下はmysqlクエリです...

SELECT atable_garage.id, 
       atable_garage.total_votes as num_votes,
       atable_garage.name, 
       atable_garage.address, 
       atable_garage.city, 
       atable_garage.postcode, 
       atable_garage.main_dealer, 
       atable_garage.phone, 
       atable_garage.website, 
       atable_garage.description, 
       atable_garage.years_in_business,
       atable_garage.garage_image,  
       (SELECT(avg(quality_of_repair) + avg(attitude_of_staff) + avg(overall_satisfaction))/3 as rating, 
               count(*) as num_votes 
          FROM atable_feedback 
         WHERE validated = 'Y'
           AND atable_garage.id = garage_id) 
  FROM `atable_garage`
 WHERE valeting = 'Y' 
   AND active = 'Y' 
ORDER BY rating DESC, atable_garage.total_votes DESC

ここで私が間違ったことを誰かが指摘できますか? 可能であれば、これについて理解するのが難しいと感じていることを説明してください。

4

2 に答える 2

1

相関サブクエリは、一度に 1 つの列しか返すことができません。2 つの列が必要なため、クエリを に変換して再構築できますLEFT JOIN

SELECT  atable_garage.id, 
        atable_garage.total_votes as num_votes,
        atable_garage.name, 
        atable_garage.address, 
        atable_garage.city, 
        atable_garage.postcode, 
        atable_garage.main_dealer, 
        atable_garage.phone, 
        atable_garage.website, 
        atable_garage.description, 
        atable_garage.years_in_business,
        atable_garage.garage_image,  
        COALESCE(b.rating, 0) rating,
        COALESCE(b.num_votes, 0) num_votes
FROM    atable_garage
        LEFT JOIN
        (
            SELECT  garage_id,
                    (avg(quality_of_repair) + avg(attitude_of_staff) + avg(overall_satisfaction)) / 3.0 as rating, 
                    count(*) as num_votes 
            FROM    atable_feedback 
            WHERE   validated = 'Y'
            GROUP   BY  garage_id
        ) b ON  atable_garage.id = b.garage_id
WHERE   valeting = 'Y' AND active = 'Y' 
ORDER   BY rating DESC, 
        atable_garage.total_votes DESC
于 2013-04-06T03:53:58.893 に答える
0

列の副選択を使用する場合、次のように 1 つの値のみを返すことができます。

   (SELECT avg(quality_of_repair) + avg(attitude_of_staff) + avg(overall_satisfaction) 
      FROM atable_feedback 
     WHERE validated = 'Y'
       AND garage_id = atable_garage.id
   )/3 as rating,
于 2013-04-06T03:21:55.580 に答える