SQL - 我需要制定一个条件来限制选择只显示与这两个条件相对应的行

Posted

技术标签:

【中文标题】SQL - 我需要制定一个条件来限制选择只显示与这两个条件相对应的行【英文标题】:SQL - I need make a condition that restrict the select to show only lines that correspond both conditions 【发布时间】:2021-06-21 12:35:03 【问题描述】:

我有我的选择,我需要两个条件,它们是:

and item.group not in (100)  
and item.subgroup not in (120) 

我需要的是,选择只显示两个条件都匹配的项目。 以我写的方式,来自组 90 和子组 120 的项目没有显示,但它们需要显示。 有人能帮我吗? :D 我不知道如何使这两个条件相互匹配。

【问题讨论】:

【参考方案1】:

你可以使用:

and not (item.group in (100) and item.subgroup in (120))

或者等效地,or:

and (item.group not in (100) or item.subgroup not in (120)) 

请注意,如果值可以是 NULL,则可能需要调整这两个值 - 取决于您希望如何处理 NULL 值。

【讨论】:

非常感谢!工作得很好【参考方案2】:

怎么样

where (group, subgroup) not in ((100, 120))

例如(基于 Scott 的emp 表):

SQL> select deptno, ename, job from emp order by deptno, job;

    DEPTNO ENAME      JOB
---------- ---------- ---------
        10 MILLER     CLERK
           CLARK      MANAGER
           KING       PRESIDENT
        20 SCOTT      ANALYST
           FORD       ANALYST
           ADAMS      CLERK            --> omit DEPTNO = 20
           SMITH      CLERK            --> and JOB = CLERK
           JONES      MANAGER
        30 JAMES      CLERK
           BLAKE      MANAGER
           MARTIN     SALESMAN
           WARD       SALESMAN
           ALLEN      SALESMAN
           TURNER     SALESMAN

14 rows selected.

让我们试试吧:

SQL> select deptno, ename, job from emp
  2  where (deptno, job) not in ((20, 'CLERK'))
  3  order by deptno, job;

    DEPTNO ENAME      JOB
---------- ---------- ---------
        10 MILLER     CLERK
           CLARK      MANAGER
           KING       PRESIDENT
        20 SCOTT      ANALYST            --> right; no Adams nor
           FORD       ANALYST            --> Smith (clerks) in DEPTNO = 20
           JONES      MANAGER            --> any more
        30 JAMES      CLERK
           BLAKE      MANAGER
           ALLEN      SALESMAN
           WARD       SALESMAN
           TURNER     SALESMAN
           MARTIN     SALESMAN

12 rows selected.

SQL>

【讨论】:

非常感谢您的帮助!【参考方案3】:

试试这个:

where item.group not in (100, 120) and item.subgroup not in (100, 120)

【讨论】:

以上是关于SQL - 我需要制定一个条件来限制选择只显示与这两个条件相对应的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询满足两个条件的重复记录只显示2条记录的方法

仅显示选择 SQL 中的前 5 个字符?

多条件拦截链如何实现?

如何制定允许用户从今天起只输入 DateTime 的 CHECK 约束?

SQL只选择一项符合条件的项目

在 Rails 上为连接、限制、选择等(不是条件)的 SQL 片段安全地转义字符串