[英]Need help excluding certain rows from joined tables in MySQL
我有一個使用MySQL的游戲。 我正在嘗試顯示最終游戲分數的列表,該列表應排除用戶已阻止的任何人。 表結構如下:
table_game
------------
table_id int
person_id int
person_nom varchar(25)
finalscore int
scoretime datetime
table_blocked
--------------
table_id int
person_id int
person_id_blocked int
假設我的person_id為'1',並且我已將person_id阻止為'5'(因此table_blocked中有一行,其中table_id = 1,person_id = 1,person_id_blocked = 5)。 這意味着我不應在結果中看到person_id'5'。
這是查詢,但是person_id'5'出現在結果中:
SELECT
f.table_id,
f.person_id as fID,
f.person_nom AS fNOM,
f.finalscore AS fFINAL,
f.scoretime AS fTIME,
table_blocked.table_id,
table_blocked.person_id,
table_blocked.person_id_blocked
FROM
table_game f
LEFT OUTER JOIN table_blocked ON f.person_id = table_blocked.person_id
WHERE (
(fFINAL > 0)
AND ((table_blocked.person_id_blocked != '5') OR (table_blocked.person_id_blocked IS NULL))
)
ORDER BY fTIME DESC
LIMIT 5
我究竟做錯了什么?
好吧,是的。 我認為寫查詢的一種更清晰的方法是:
SELECT f.table_id, f.person_id as fID, f.person_nom AS fNOM, f.finalscore AS fFINAL,
f.scoretime AS fTIME, table_blocked.table_id, table_blocked.person_id,
tb.person_id_blocked
FROM table_game f
WHERE f.person_id not in (select person_id_blocked from table_blocked) and
f.finalscore > 0
然后將變成:
SELECT f.table_id, f.person_id as fID, f.person_nom AS fNOM, f.finalscore AS fFINAL,
f.scoretime AS fTIME, table_blocked.table_id, table_blocked.person_id,
tb.person_id_blocked
FROM table_game f LEFT OUTER JOIN
table_blocked tb
ON f.person_id = tb.person_id_blocked
WHERE tb.person_id_blocked is null and
f.finalscore > 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.