【发布时间】:2016-03-13 00:54:43
【问题描述】:
我遇到了复杂的 MySQL 查询问题:
一个表包含所有 id(项目 id)的行,另一个表包含已查看项目的“project_ID”。因此,我需要获取该用户尚未查看但可能已被其他用户查看的所有 ID。
这是目前失败的代码查询:
SELECT p.id FROM projects p
LEFT JOIN projects_viewed pv ON p.id = pv.project_id
WHERE NOT pv.username = 'SomeOneElse';
它会起作用,但我认为它可能会失败,因为 p.username 可以等于或不等于“SomeOneElse”,因为“pv.project_id”不是前面提到的唯一。
这是一个示例,初始值如下:
INSERT INTO `projects` (`id`) VALUES
(1), (2), (3), (4), (5);
INSERT INTO `projects_viewed` (`project_id`, `username`,) VALUES
(1, 'Billy'),
(2, 'SomeOneElse'),
(2, 'Billy'),
(3, 'Billy'),
(4, 'SomeOneElse'),
(4, 'Billy'),
(5, 'Billy'),
如果用户名是“SomeOneElse”,那么我想返回项目表中的所有 id在 projects_viewed 中的用户名不是我们查询时使用的用户名(在本例中为“SomeOneElse”)。
所以在这个例子中,应该只返回 id 的 1、3 和 5。
【问题讨论】: