MySQL 用于在 uuid 上加入 table 并省略 table 中存在的 uuid
MySQL for joining a table on uuid and omitting uuids present in both table
我正在尝试弄清楚如何最好地编写一个语句来省略用户(uuid_user
)具有的返回行(maintable
)已经看过 (seentable
)。用户已经看到的行存储在 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);
我正在尝试弄清楚如何最好地编写一个语句来省略用户(uuid_user
)具有的返回行(maintable
)已经看过 (seentable
)。用户已经看到的行存储在 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);