我的SQL查詢:SQL調用表
SELECT
upd.*,
usr.username AS `username`,
usr.profile_picture AS `profile_picture`
,(
SELECT
COUNT(lik.id)
FROM
likes as lik
WHERE
upd.update_id = lik.item_id
AND
lik.uid = 118697835834
AND lik.type=0
) as liked_update,
(
SELECT
COUNT(fav.id)
FROM
favorites as fav
WHERE
upd.update_id = fav.item_id
AND
fav.uid = 118697835834
AND fav.type=0
) as favorited_update
FROM
updates AS upd
LEFT JOIN
users AS usr
ON upd.uid = usr.uid
WHERE
upd.deleted=0
AND
(
upd.uid=118697835834
OR EXISTS
(
SELECT
*
FROM
subscribers AS sub
WHERE
upd.uid = sub.suid
AND sub.uid = 118697835834
)
OR EXISTS
(
SELECT
*
FROM
topics as topic
WHERE
upd.uid = topic.uid
AND sub.uid = 118697835834
)
)
ORDER BY upd.date DESC
LIMIT 0, 15
我得到一個錯誤,因爲sub
不能在subquery2,因爲被稱爲其僅在subquery1 ...我如何能確保我可以稱它爲在子查詢2以及?我是否必須在FROM
之上的LEFT JOIN用戶上面?
Unknown column 'sub.uid' in 'where clause'
是的,你需要加入表格。如果您發佈了整個查詢,我敢打賭還有更多可以完成的查詢來優化您的查詢並縮短查詢時間並加快運行速度。 – Travesty3 2012-03-06 20:15:22
已更新的問題 – fxuser 2012-03-06 20:17:54
我沒有得到的東西......如果第二個「存在」檢查主題和訂閱者,與前面的「存在」不是多餘的,它只檢查訂戶,而不會該塊已經是真的? – 2012-03-06 20:57:13