Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
Sql 根据第三个表中的值查找不存在的位置_Sql_Sql Server_Tsql_Sql Server 2008 R2 - Fatal编程技术网

Sql 根据第三个表中的值查找不存在的位置

Sql 根据第三个表中的值查找不存在的位置,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我有一个名为Cities的表,如下所示: +--------+-------------+-------+----------+------------+ | CityID | City | State | TimeZone | UserAccess | +--------+-------------+-------+----------+------------+ | 1 | Albany | NY | 4 | 1 | |

我有一个名为
Cities
的表,如下所示:

+--------+-------------+-------+----------+------------+
| CityID |    City     | State | TimeZone | UserAccess |
+--------+-------------+-------+----------+------------+
|      1 | Albany      | NY    |        4 |          1 |
|      2 | Allentown   | PA    |        6 |          1 |
|      3 | Albuquerque | NM    |        4 |          1 |
|      4 | Amarillo    | TX    |        3 |          1 |
|      5 | Atlanta     | GA    |        4 |          1 |
+--------+-------------+-------+----------+------------+
+--------+----------+
| CityID | RegionID |
+--------+----------+
|      1 |       14 |
|      1 |       15 |
|      2 |       14 |
|      3 |       11 |
|      4 |       12 |
|      4 |       13 |
|      5 |       12 |
|      5 |       13 |
+--------+----------+
+----------+-----------+--------+
| RegionID |  Region   | TypeID |
+----------+-----------+--------+
|       10 | West      |      1 |
|       11 | West      |      2 |
|       12 | South     |      1 |
|       13 | South     |      2 |
|       14 | Northeast |      1 |
|       15 | Northeast |      2 |
+----------+-----------+--------+
我有另一个名为
CitiesToRegions
的表,如下所示:

+--------+-------------+-------+----------+------------+
| CityID |    City     | State | TimeZone | UserAccess |
+--------+-------------+-------+----------+------------+
|      1 | Albany      | NY    |        4 |          1 |
|      2 | Allentown   | PA    |        6 |          1 |
|      3 | Albuquerque | NM    |        4 |          1 |
|      4 | Amarillo    | TX    |        3 |          1 |
|      5 | Atlanta     | GA    |        4 |          1 |
+--------+-------------+-------+----------+------------+
+--------+----------+
| CityID | RegionID |
+--------+----------+
|      1 |       14 |
|      1 |       15 |
|      2 |       14 |
|      3 |       11 |
|      4 |       12 |
|      4 |       13 |
|      5 |       12 |
|      5 |       13 |
+--------+----------+
+----------+-----------+--------+
| RegionID |  Region   | TypeID |
+----------+-----------+--------+
|       10 | West      |      1 |
|       11 | West      |      2 |
|       12 | South     |      1 |
|       13 | South     |      2 |
|       14 | Northeast |      1 |
|       15 | Northeast |      2 |
+----------+-----------+--------+
我有一个
区域
表,如下所示:

+--------+-------------+-------+----------+------------+
| CityID |    City     | State | TimeZone | UserAccess |
+--------+-------------+-------+----------+------------+
|      1 | Albany      | NY    |        4 |          1 |
|      2 | Allentown   | PA    |        6 |          1 |
|      3 | Albuquerque | NM    |        4 |          1 |
|      4 | Amarillo    | TX    |        3 |          1 |
|      5 | Atlanta     | GA    |        4 |          1 |
+--------+-------------+-------+----------+------------+
+--------+----------+
| CityID | RegionID |
+--------+----------+
|      1 |       14 |
|      1 |       15 |
|      2 |       14 |
|      3 |       11 |
|      4 |       12 |
|      4 |       13 |
|      5 |       12 |
|      5 |       13 |
+--------+----------+
+----------+-----------+--------+
| RegionID |  Region   | TypeID |
+----------+-----------+--------+
|       10 | West      |      1 |
|       11 | West      |      2 |
|       12 | South     |      1 |
|       13 | South     |      2 |
|       14 | Northeast |      1 |
|       15 | Northeast |      2 |
+----------+-----------+--------+
我试图做的是编写一个查询,以便根据
Regions
表的
TypeID
查看缺少
CitiesToRegions
指定的位置。到目前为止,我得到的结果是什么都不返回,我确信这是因为我的第一个join没有找到空值,因为
CityID
分配了
RegionID
。我就是不知道如何写下我想要的东西

SELECT DISTINCT Cities.CityID
FROM Cities
    INNER JOIN CitiesToRegions on Cities.CityID = CitiesToRegions.CityID
    FULL JOIN Regions on CitiesToRegions.RegionID = Regions.RegionID
WHERE (CitiesToRegions.RegionID is null) AND (Cities.UserAccess=1) AND (Regions.TypeID != 1)
对于查询结果,我希望看到的是以下内容,因为它是唯一一个没有
RegionID的
城市ID

+--------+
| CityID |
+--------+
|      3 |
+--------+

注意:我不想看到2中缺少的
TypeID
,因为我会运行相同的查询,并将
TypeID
作为变量传入:

以下内容应该满足您的需要-我发现
不存在
子查询更清楚地获得正确的逻辑,然后是复杂的连接

select *
from Cities C
where not exists (
  select 1
  from CitiesToRegions CR
  inner join Regions R on CR.RegionID = R.RegionID and R.TypeID = 1
  where CR.CityID = C.CityID
)

CitiesToRegions.RegionID对于该数据和这些联接永远不会为空。Cities和CitiesToRegions之间的内部连接意味着所有这些都将匹配,而与Regions的完全连接是毫无意义的,因为您仍然需要匹配Cities值。我可能会使用
notexists
子句而不是join。