0

我试图弄清楚如何最好地编写一个省略maintable用户(uuid_user)已经看到(seentable)的返回行()的语句。

  • 问:我应该让“seen”表成为每个用户的单独表吗?

目前,我将它作为所有用户的单个seen

用户已经看到的行存储在seentable每个uuid_user. 这是我的表格的简化版本。uuid用作加入的密钥。uuid_user标识特定用户看到的行。

不太工作:

SELECT * 
  FROM maintable m 
 LEFT JOIN seentable s 
    on m.uuid = s.uuid 
 WHERE s.uuid IS NULL and s.uuid_user = '[user]'
maintable
uuid (char36)
lng,lat (POINT)
timestamp (timestamp)

seentable 
uuid (char36)
uuid_user (char36)
timestamp (timestamp)
4

1 回答 1

0

您需要将限制uuid_userWHERE子句移动到联接的ON子句:

SELECT * 
FROM maintable m 
LEFT JOIN seentable s 
    ON m.uuid = s.uuid AND s.uuid_user = '[user]'
WHERE s.uuid IS NULL;

以上就是你想要的逻辑。uuid现在,只要值匹配并且uuid_user所见表中的值与某个值匹配,就会成功连接两个表中的记录。请注意,如果该uuid_user值与任何记录都不匹配,则不会被过滤掉,这将在您当前的查询中发生。

于 2021-02-22T06:23:13.047 回答