0

次のクエリは phpMyAdmin では機能しますが、PHP の Web サイトから実行すると機能しません。

SELECT * FROM 
      (SELECT name, zone FROM staff 
        LEFT OUTER JOIN zones 
          ON staff.suburb=zones.suburb
      ) A WHERE zone='2'

次のクエリも Web サイトでは機能しませんが、phpMyAdmin では機能します。

SELECT name, zone FROM staff 
  LEFT OUTER JOIN zones 
    ON staff.suburb=zones.suburb 
  WHERE zone='2'

どちらもエラーになります:

'where 句' の列 'zone' が不明です。

ここで何が間違っていますか?

4

2 に答える 2

0

あなたが提供した方法で最初のクエリを実行したい場合は、次のようにする必要があります。

SELECT * 
FROM (
    SELECT name,zone 
    FROM staff 
    LEFT OUTER JOIN zones ON staff.suburb=zones.suburb
) A 
WHERE A.zone='2'

しかし、なぜあなたが SUB-SELECT を行っているのか完全に理解できません。それはまったく不要です。タイプミスがない限り、2 番目のクエリは機能するはずです。また、次のように、クエリで使用されるすべての列またはテーブル名をエスケープすることをお勧めします。

SELECT `name`, `zone` 
FROM `staff` s 
LEFT OUTER JOIN `zones` z 
    ON s.`suburb` = z.`suburb` 
WHERE z.`zone` = '2'
于 2012-05-10T13:37:53.243 に答える
0

これを試して :

SELECT `name`, `zone`
FROM `staff` AS s
LEFT OUTER JOIN `zones` AS z ON `s`.`suburb`=`z`.`suburb`
WHERE `s`.`zone`='2';

zoneがテーブルにあるとしますstaff。テーブルzonesにある場合は、WHERE を次のように変更します。

WHERE `z`.`zone`='2';

ここで重要な部分は、WHERE 句の精度です。おそらく、MySQL はどこ (どのテーブル) を参照すればよいかわからないため、テーブルに精度を追加するとリスクが軽減されます。さらに、この列がそのテーブルに存在することを確認してください (そのタイプミスがあると、エラーが発生zonesするZone可能性があります)。

于 2012-05-10T13:43:35.247 に答える