MySQL 用于在 uuid 上加入表并省略两个表中存在的 uuid



我正在尝试找出如何最好地编写一个语句,该语句省略用户(uuid_user)已经看到(seentable)的返回行(maintable)。用户已看到的行存储在seentable中。这是我的表格的简化版本。uuid用作加入的密钥。uuid_user标识特定用户的已看到行。

不太有效:

SELECT * 
FROM maintable 
JOIN seentable 
on maintable.uuid = seentable.uuid 
WHERE maintable.uuid != seentable.uuid
maintable
uuid (char36)
lng,lat (POINT)
timestamp (timestamp)
seentable 
uuid (char36)
uuid_user (char36)
timestamp (timestamp)

如果你想坚持使用连接方法,那么你可以使用左反连接:

SELECT m.*
FROM maintable m
LEFT JOIN seentable s ON m.uuid = s.uuid
WHERE s.uuid IS NULL;

或者,您可以使用存在逻辑来表达这一点:

SELECT m.*
FROM maintable m
WHERE NOT EXISTS (SELECT 1 FROM seentable s WHERE s.uuid = m.uuid);

最新更新