簡體   English   中英

需要幫助從MySQL的聯接表中排除某些行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM