2010-06-24 143 views
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 

我覺得我很接近得到查詢工作,但我不斷收到消息,「每一個派生表必須有自己的別名。」我google了這個,從我讀過的東西,我需要別名的部分子查詢,我嘗試過,但我仍然無法得到它的工作。

+0

只是一個簡單的問題......你在哪裏得到「信息」?它是別名還是表格? – hallie 2010-06-24 01:23:46

+0

@hallie:鑑於Eric沒有使用表別名,我相信這是一張表。埃裏克將不得不讓我們知道,如果引用到'INFO'應該在這個查詢中,否則它們如何與派生表相關... – 2010-06-24 01:38:00

+0

我懷疑......在info.mid = media.id上加入媒體。 ..實際上應該是...加入info.mid = media.id的信息** ... – 2010-06-24 11:10:58

回答

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。

+0

啊,這是有道理的。我認爲我不得不別名的部分在子查詢中。只是根據您的輸入重新編寫了查詢,並且工作完美! – Eric 2010-06-24 11:58:04