提问人:Edw4rd 提问时间:10/22/2021 最后编辑:forpasEdw4rd 更新时间:10/22/2021 访问量:88
SQL 括号
SQL Parenthesis
问:
我在使用SQL表达式时遇到了问题,该表达式没有执行我认为它应该做的事情。
我有属于客户的工作,而且这些工作可能与某个项目有关,或者该项目将为空(如果它们与列中的项目有关,则显示为 int)。project_id
首先,我正在接受所有可用的工作,但是当项目为空时,我需要删除某些客户端。
我在子句中这样做:WHERE
AND (p4_.uid NOT IN (722, 4736, 1041, 735) AND s3_.project_id IS NULL)
但是SQL把它看作是两个分开的AND
AND p4_.uid NOT IN (722, 4736, 1041, 735)
AND s3_.project_id IS NULL
例如,即使客户端分配了项目 ID 的作业,也不会显示来自具有 uid 735 的客户端的任何内容。
答:
1赞
forpas
10/22/2021
#1
但是当项目为空时,我需要删除某些客户端
此要求应写为:
AND NOT (p4_.uid IN (722,4736,1041,735) AND s3_.project_id IS NULL)
或等效的:
AND (p4_.uid NOT IN (722,4736,1041,735) OR s3_.project_id IS NOT NULL)
评论
0赞
Edw4rd
10/22/2021
谢谢,你能向我解释为什么这不起作用吗:AND (p4_.uid NOT IN (722,4736,1041,735) AND s3_.project_id IS NOT NULL)
0赞
forpas
10/22/2021
@Edw4rd 2 个布尔表达式中的每一个都应用于数据集的每一行,并且由于它们之间的运算符 AND,它们都必须返回 TRUE 才能通过它们的组合获得 TRUE。 过滤掉括号中的所有 UID,而不考虑project_id。 过滤掉所有具有 null project_id的 UID,而不考虑 UID。p4_.uid NOT IN (722,4736,1041,735)
s3_.project_id IS NOT NULL
下一个:使用 9 位加法器的 9 位减法
评论
AND (a > 1 AND b < 2)
AND a > 1 AND b < 2
AND
AND (...)
(...)
a > 1 AND b < 2
a > 1 OR b < 2
AND