当前位置: 首页 > 知识库问答 >
问题:

仅当内部联接记录存在时,才在内部联接上添加sql语句条件

柴修筠
2023-03-14

我试图根据连接表中的条件从用户表中选择一行,仅当连接表中存在一条记录时。如果记录不存在,我想返回该行。我只想在存在INNER JOIN记录且contact_blocked时不返回该行!=1。

通过下面的语句,我实现了当用户记录存在且联系人的值为0时我想要的结果。那一排被退回。当联系人被阻止时,不会返回任何内容。没关系。然而,另外,当内部连接记录还不存在时,我仍然希望与用户一起返回该行,因为它们尚未被阻止,也不存在任何关系。不知道该怎么做。

这就是我想要的没有加入:

SELECT users.user_id 
FROM users
WHERE users.username = 'Danny Boy' 

这就是我想要的加入:

SELECT users.user_id 
FROM users 
INNER JOIN users_to_users 
ON users.user_id = users_to_users.user_id 
AND users_to_users.contact_user_id ='123' 
WHERE users.username = 'Danny Boy' 
AND users_to_users.contact_blocked != 1

我希望连接条件仅在连接记录存在时应用。否则,我希望第一个案例适用。

编辑

期望的结果。

如果users_to_users记录存在,只有在用户中返回用户名“丹尼男孩”的行,如果users_to_users.contact_blocked!=1。

如果users_to_users记录不存在,则返回用户中丹尼男孩的行

共有1个答案

红智鑫
2023-03-14

我想你想要:

SELECT u.user_id 
FROM users u LEFT JOIN
     users_to_users utu
     ON u.user_id = utu.user_id AND utu.contact_user_id = '...' 
WHERE u.username = '...'  AND
      (utu.contact_blocked = 1 OR utu.contact_blocked IS NULL);
 类似资料:
  • 问题内容: 我有一个在MySQL中运行良好的查询,但是在Oracle上运行该查询时,出现以下错误: SQL错误:ORA-00933:SQL命令未正确终止 00933。00000-“ SQL命令未正确终止” 查询是: 问题答案: 该语法在Oracle中无效。你可以这样做: 或者您 可以 执行以下操作: 它取决于内联视图是否被Oracle更新( 要更新第二条语句取决于 此处 列出的一些规则 )。

  • 我有两张桌子如下 表1是父表,表2是子表。 如何在Oracle11g中创建连接来实现这一点。我使用sql navigator+

  • 问题内容: 我似乎无法内部连接到教师表以获得名字和姓氏。 我收到的错误消息是 问题答案: 以下错误是因为您未指定列: Msg 8156,第16级,状态1,第3行 为“ MaxBookingDays”多次指定了“ ID”列。 因此,我将您的查询稍作更改,如下所示:

  • 本文向大家介绍Microsoft SQL Server 内部联接,包括了Microsoft SQL Server 内部联接的使用技巧和注意事项,需要的朋友参考一下 示例 Inner join根据一个或多个条件(使用ON关键字指定)仅返回在两个表中匹配/存在的记录/行。这是最常见的联接类型。的一般语法为inner join: 也可以简化为JOIN: 例 将内部联接与左侧外部联接一起使用(不存在替代)

  • 问题内容: 我不知道是什么问题。使用MySQL 5.0尝试运行以下MYSQL更新语句时出现编译错误 所有字段名称都是正确的。有什么想法吗? 问题答案: 尝试这个: 更新: 既然您说查询产生了语法错误,所以我创建了一些可以对其进行测试的表,并确认查询中没有语法错误: 看到?没有语法错误。我针对MySQL 5.5.8进行了测试。

  • 问题内容: 这个问题已经在这里有了答案 : INNER JOIN ON vs WHERE子句 (12个答案) 7年前关闭。 我有两个选择连接SQL语句: 显然,它们的结果相同。但是它们之间没有任何区别,例如性能,可移植性。 问题答案: 一个区别是,第一个选项通过在where子句中表达联接条件来隐藏意图。 第二个选项,写出连接条件的条件对于阅读查询的用户来说更加清楚。它显示了查询的确切意图。 至于性