2

次のクエリがあります。

SELECT
(...),
(SELECT us.short FROM url_short us WHERE us.urlId = u.id
  ORDER BY us.id DESC LIMIT 1) as short, 
(...),
(SELECT f.name FROM `group` f LEFT JOIN group_url fu ON f.id = fu.group_id WHERE
  fu.url_id = u.id ORDER BY f.id DESC LIMIT 1) as f_name
FROM (...)
WHERE (...) AND
(u.url LIKE '%ops%'
OR short LIKE '%ops%'
OR u.url_name LIKE '%ops%'
OR f_name LIKE '%ops%')
(...)

ただし、LIKEshortf_groupMySQL で使用しようとすると、次のように言われます。

#1054 - Unknown column 'short' in 'where clause'

私はすでにたくさん検索しましたが、何も見つかりませんでした

4

2 に答える 2

2

where 句はエイリアスを認識しません。これは、結果セットのフィルタリングshortに行われる射影ステップによってのみ導入されるためです (これは最も外側の句によって実現されます)。WHERE

試す

SELECT *
  FROM (
          SELECT
          (...),
          (SELECT us.short FROM url_short us WHERE us.urlId = u.id
            ORDER BY us.id DESC LIMIT 1) as short, 
          (...),
          (SELECT f.name FROM `group` f LEFT JOIN group_url fu ON f.id = fu.group_id WHERE
            fu.url_id = u.id ORDER BY f.id DESC LIMIT 1) as f_name
          FROM (...)
          WHERE (...)
       ) emb
   WHERE (emb.url LIKE '%ops%'
          OR emb.short LIKE '%ops%'
          OR emb.url_name LIKE '%ops%'
          OR emb.f_name LIKE '%ops%')
       ;
于 2013-08-02T15:50:22.007 に答える
1

クエリでエイリアスを使用すると、おそらくこのエラーが発生します。 同様の問題を持つ別の質問があります

于 2013-08-02T15:45:13.127 に答える