Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
select sql中的not TOWER子句中的任意一个_Sql_Oracle - Fatal编程技术网

select sql中的not TOWER子句中的任意一个

select sql中的not TOWER子句中的任意一个,sql,oracle,Sql,Oracle,查找位于波士顿或达拉斯的所有部门的名称,而不是两个城市的名称 我有这样的代码 SELECT D.DNAME FROM DEPARTMENT D INNER JOIN DEPTLOC L ON L.DNAME = D.DNAME WHERE L.CITY='BOSTON' OR L.CITY='DALLAS' ; --take only those that ara in one city SELECT DNAME_WITH_COUNT.DNAME FROM --coun

查找位于波士顿或达拉斯的所有部门的名称,而不是两个城市的名称

我有这样的代码

SELECT D.DNAME 
FROM DEPARTMENT D 
INNER JOIN DEPTLOC L ON L.DNAME = D.DNAME 
WHERE L.CITY='BOSTON' 
OR L.CITY='DALLAS' ;
--take only those that ara in one city
SELECT DNAME_WITH_COUNT.DNAME FROM
        --count how many times it occurs
        (SELECT DNAME, COUNT(DNAME) CNT FROM
            --your select with both cities
            (SELECT D.DNAME 
            FROM DEPARTMENT D 
            INNER JOIN DEPTLOC L ON L.DNAME = D.DNAME 
            WHERE L.CITY='BOSTON' 
            OR L.CITY='DALLAS'
            ) 
        )DNAME_WITH_COUNT
    WHERE CNT>1;
但这将显示位于波士顿或达拉斯的部门。但我只想进入其中任何一个,我应该投入什么才能得到结果

例如: 在我的DEPTLOC表中

     //DEPTLOC
     DNAME      CITY
     ----------------
     ACCOUNTING  BOSTON
     ACCOUNTING  DALLAS
     SALES       DALLAS
     TRANSPORT   BOSTON
     TRANSPORT   DALLAS
所以在我的部门 我应该得到像这样的输出

      DNAME
      ----------
      SALES

您可以使用聚合查询联接
department
表,每个部门只返回一个位置:

SELECT     d.dname
FROM       department d
INNER JOIN (SELECT   dname
            FROM     deptloc
            WHERE    city IN ('BOSTON', 'DALLAS')
            GROUP BY dname
            HAVING   COUNT(*) = 1) l ON l.dname = d.dname
试试这个:

SELECT D.DNAME 
FROM DEPARTMENT D 
INNER JOIN DEPTLOC L ON L.DNAME = D.DNAME 
GROUP BY D.DNAME
HAVING 1 = SUM(CASE WHEN L.CITY IN ('BOSTON', 'DALLAS') THEN 1 ELSE 0 END);

将它们分组,然后计算每个部门的总数,然后筛选只有一个位置的所有部门

SELECT D.DNAME 
FROM DEPARTMENT D 
INNER JOIN DEPTLOC L ON L.DNAME = D.DNAME 
WHERE L.CITY='BOSTON' 
OR L.CITY='DALLAS'
GROUP BY
D.DNAME
HAVING COUNT(1) = 1
你可以写:

SELECT department.dname
  FROM department
  JOIN deptloc
    ON department.dname = deptloc.dname
 WHERE deptloc.city IN ('BOSTON', 'DALLAS')
 GROUP
    BY department.dname
HAVING COUNT(DISTINCT deptloc.city) = 1
;
因此,由于
deptloc.dname
中的每个值可能也出现在
department.name
中,因此您可以省去连接,只需编写:

SELECT dname
  FROM deptloc
 WHERE city IN ('BOSTON', 'DALLAS')
 GROUP
    BY dname
HAVING COUNT(DISTINCT city) = 1
;

试试这样的

SELECT D.DNAME 
FROM DEPARTMENT D 
INNER JOIN DEPTLOC L ON L.DNAME = D.DNAME 
WHERE L.CITY='BOSTON' 
OR L.CITY='DALLAS' ;
--take only those that ara in one city
SELECT DNAME_WITH_COUNT.DNAME FROM
        --count how many times it occurs
        (SELECT DNAME, COUNT(DNAME) CNT FROM
            --your select with both cities
            (SELECT D.DNAME 
            FROM DEPARTMENT D 
            INNER JOIN DEPTLOC L ON L.DNAME = D.DNAME 
            WHERE L.CITY='BOSTON' 
            OR L.CITY='DALLAS'
            ) 
        )DNAME_WITH_COUNT
    WHERE CNT>1;

你在使用哪种RDBMS?如果它有两个位置,但达拉斯和纽约呢?看起来,问题正好是波士顿和达拉斯。经过测试。工作完美。我仍然理解代码!谢谢你。我可以问@Minh。如果两个位置不同。它会出现两次吗?还是仍然相同?@user3553846:它仍然有效。他是对的。有计数(1)=1不受其他位置的影响。您可以添加更多数据并重试。