1

あるテーブルの行をフィルタリングし、その結果を別のテーブルに結合して、追加の行を除外するクエリを実行しようとしています。

これが私が書いたクエリです:

SELECT * 
  FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
          FROM media 
         WHERE flagged2 != 'nsfw' 
           AND status2 != 'deleted' 
     ORDER BY id2 DESC LIMIT 0,5) 
  JOIN media on info.mid = media.id 
 WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid

クエリを機能させるのにかなり近いと思いますが、「すべての派生テーブルには独自のエイリアスが必要です」というメッセージが表示され続けます。私はこれをグーグルで検索しました、そして私が読んだものから、私が試したサブクエリの一部をエイリアスする必要がありますが、それでもそれを機能させることができません。

4

1 に答える 1

3

使用する:

SELECT * 
  FROM (SELECT media.id AS id2, media.flagged AS flagged2, media.item_status AS status2 
          FROM media 
         WHERE flagged2 != 'nsfw' 
           AND status2 != 'deleted' 
      ORDER BY id2 DESC LIMIT 0, 5) x
  JOIN media on info.mid = media.id 
 WHERE info.topic = 'food_drink' 
    OR info.topic='cooking' 
GROUP BY info.mid

xブラケットのすぐ外側ですが、結合の前に表示されますか? それがエラーの内容です。FROM の後と JOIN の前の括弧内のものは派生テーブル (AKA インライン ビュー) であり、MySQL ではテーブル エイリアスを指定する必要があります。次に、その内部から列を参照するときは、x.id2/etc を使用します。

于 2010-06-24T01:26:20.670 に答える