gpt4 book ai didi

mysql - SQL 条件内连接

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:38 25 4
gpt4 key购买 nike

假设我有 2 个表。

Nav:
-----------
id INT NOT NULL,
title VARCHAR(50) NOT NULL,
target_page INT DEFAULT NULL;

Pages:
-----------
id INT NOT NULL,
url VARCHAR(200) NOT NULL,
access_level INT NOT NULL;

请注意 Nav 中的 target_page 可以为 NULL。如果我想在从 Nav 选择数据的同时从 Pages 获取 url,我可以使用内部连接:

SELECT Nav.id, Nav.title, Pages.url FROM Nav
INNER JOIN Pages ON Pages.id = Nav.target_page

如果我想添加一个额外的条件,比如系统的当前用户只能看到他们有权访问的页面,我可以添加一个额外的条件:

SELECT Nav.id, Nav.title, Pages.url FROM Nav
INNER JOIN Pages ON Pages.id = Nav.target_page
WHERE Pages.access_level <= OurImaginaryUserLevel

Inner Join 确保用户没有从 Nav 返回的行链接到页面中 access_level 大于用户的记录。

但是,Nav 中的某些记录的 target_page 为 NULL。我想返回这些记录,即使 INNER JOIN 阻止返回它们,因为页面中没有 ID 为 NULL 的记录。

只有 target_page 为 NULL 的记录才能免于 INNER JOIN。 target_page 为 Not NULL 的记录只有在 Pages 表中存在匹配且满足 Pages.access_level 条件时才应返回,因此我不能使用 Left Join。

如果我的要求难以理解,我深表歉意。如有任何问题,请随时提出。

提前致谢

最佳答案

我认为您误解了 LEFT JOIN - 在您的情况下,您可以将 INNER JOIN 替换为 LEFT JOIN 并获得相同的结果结果!

为了实现您想要的效果,您实际上需要使用它,因为您也喜欢从 Nav 中检索没有 target_page 的行:

SELECT Nav.id, Nav.title, Pages.url FROM Nav
LEFT JOIN Pages ON Pages.id = Nav.target_page
WHERE Pages.access_level <= 1 OR target_page IS NULL

演示:http://sqlfiddle.com/#!2/69ed06/1

如您所见,这将返回具有 1 级页面和没有任何页面关联的导航。

关于mysql - SQL 条件内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143421/

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