Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Azure_Azure Sql Database - Fatal编程技术网

Sql 检查子查询中是否存在记录

Sql 检查子查询中是否存在记录,sql,sql-server,azure,azure-sql-database,Sql,Sql Server,Azure,Azure Sql Database,我有以下三张桌子 来源 Id | Name | SiteId ---+--------------+--------- 1 | Source 1 | 1 2 | Source 2 | 1 3 | Source 3 | 2 4 | Source 4 | 2 SourceAccount SourceId | AccountId ---------+---------- 1 | 1 2 | 1 3 |

我有以下三张桌子

来源

Id | Name         | SiteId
---+--------------+---------
1  | Source 1     | 1
2  | Source 2     | 1
3  | Source 3     | 2
4  | Source 4     | 2
SourceAccount

SourceId | AccountId
---------+----------
1        | 1
2        | 1
3        | 1
4        | 1
SourceUser

SourceId | UserId
---------+----------
1        | 1
3        | 1
我正试图用以下参数建立一个查询

  • 站点ID(1)
  • 帐户ID(1)
  • 用户标识(1)
使用这些参数,查询应该返回如下内容

SourceId | Name         | Access
---------+--------------+---------
1        | Source 1     | 1
2        | Source 2     | 0
访问列为布尔值(位)

因此,本质上,查询应该返回作为给定站点Id的给定AccountId的一部分的所有源(Id和名称),以及一个布尔值,告诉我用户是否有权访问它

你知道怎么做吗

谢谢

编辑: 下面是我提出的但不起作用的查询:

 SELECT s.[Id], s.[Name]
      ,(IF EXISTS (SELECT 1 FROM [dbo].[SourceUser] su WHERE su.SourceId = s.[Id] AND su.UserId = 1)
            SELECT CAST(1 AS BIT)
        ELSE
            SELECT CAST(0 AS BIT))
  FROM [dbo].[Source] s
  INNER JOIN [dbo].[SourceAccount] sa ON sa.SourceId = s.Id
  WHERE sa.AccountId = 1
  AND s.SiteId = 1
可能还值得一提的是,我正在SQLAzure和SQLServer2012上运行此功能

编辑2:关系

      SiteAccount - Site - SiteUser - User
      |                 \               |
Account - SourceAccount - Source - SourceUser
试试这个:

SELECT s.[Id],
       s.[Name],
       CASE WHEN EXISTS (SELECT 1 FROM [dbo].[SourceUser] su WHERE su.SourceId = s.[Id] AND su.UserId = 1)
            THEN CAST(1 AS BIT)
            ELSE CAST(0 AS BIT)
       END AS Access
 FROM [dbo].[Source] s
 INNER JOIN [dbo].[SourceAccount] sa ON sa.SourceId = s.Id
 WHERE sa.AccountId = 1 AND s.SiteId = 1

这三个表之间的关系并不完全清楚,您有四个来源,每个来源都与科目1相关。列标题是否正确?但是我的想法是,你应该使用一个左外连接,这里没有加起来,源1和源2都与站点id 1和帐户id 1相关,用户在你的表中的位置如何?我实际上去掉了帐户和用户表。事实上,源是站点的一部分,可供帐户使用,并且在帐户中仅可供某些用户使用saccount-SourceAccount-Source-SourceUser-User-Account-UserWow看起来与任何东西都不一样。。。将其添加到问题中我一直在浪费时间设置sqlfiddles,我应该首先开始查询:D这里您可以看到AccountId不是SourceUser的一部分,因此在这种情况下,我不能让su.AccountId=1So AccountId变为UserId。我得到了结果,我将验证这是否适用于多个案例,但看起来像这样很好是的,只需在case语句中将AccountId更改为UserID。已编辑。我确认一切正常!将接受答案并尝试添加额外的表格,如编辑2中所示。谢谢