gpt4 book ai didi

php - MySQL 仅在未找到匹配项时返回

转载 作者:可可西里 更新时间:2023-11-01 08:04:33 26 4
gpt4 key购买 nike

我在处理复杂的 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,如果没有找到 id(来自项目表)和 project_id(来自 projects_viewed 表)之间的匹配项,或者唯一匹配的在 projects_viewed 中的用户名不是我们正在查询的用户名(在本例中为“SomeOneElse”)。

所以在这个例子中,应该只返回 id 的 1、3 和 5。

最佳答案

您正在否定您的外连接。您可以将该条件移动到 join,然后检查 null:

select p.id 
from projects p
left join projects_viewed pv on
p.id = pv.project_id and
pv.username = 'SomeOneElse'
where pv.project_id is null

或者,您可以为此使用不存在:

select *
from projects p
where not exists (
select 1
from projects_viewed pv
where p.id = pv.project_id and
pv.username = 'SomeOneElse'
)

关于php - MySQL 仅在未找到匹配项时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35965229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com