Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 - Fatal编程技术网

Sql 连接四个表以从左表获取数据

Sql 连接四个表以从左表获取数据,sql,Sql,我有 表1(档案名称、资产状态、资产名称、基本名称) 表2(标题、角色等)标题通过配置文件名链接到表1 Table 3(Base\u Name,Role\u Id)Base通过BaseName链接到Table 1 表4(角色ID,Rolename)角色ID链接到表3(角色ID) 现在我想从表1中获取有关角色的数据库。 比如说 Table 1 Test-POD AVAILABLE FOR SERVICE XYLENE Test-Base Test-N AVAI

我有
表1(档案名称、资产状态、资产名称、基本名称)

表2(标题、角色等)
标题通过配置文件名链接到表1
Table 3(Base\u Name,Role\u Id)
Base通过BaseName链接到Table 1
表4(角色ID,Rolename)
角色ID链接到表3(角色ID)

现在我想从表1中获取有关角色的数据库。 比如说

Table 1
Test-POD    AVAILABLE FOR SERVICE   XYLENE          Test-Base
Test-N      AVAILABLE FOR SERVICE   X1              Test-Base
Test-N      AVAILABLE FOR SERVICE   X1              Test-Base
Test-N      AVAILABLE FOR SERVICE   X1              Test-Base
Test-POD    UNAVAILABLE FOR SERVICE XYLENE          Test-Base
Test-POD    UNAVAILABLE FOR SERVICE XYLENE          Test-Base
Test-POD    UNAVAILABLE FOR SERVICE XYLENE          Test-Base
表2(有试验吊舱数据)

表3(具有Test-N的角色id)

表4

Test-Role           95D90BD1-6A31-4CB7-895A-1CDF3FBA428D
Test-Role-POD1      DCFA3F6B-066E-4C1E-858C-652520B9BABD
Test-Role-POD       EF3E9A85-E709-4CD4-8F04-8570B3CBC2CC
要根据所选角色进行筛选。已在下面的查询中尝试

    SELECT 
      distinct(COUNT(Exception.asset_status)) AS CountOfasset_status1, 
      Exception.asset_name, Exception.asset_description
    FROM 
      (((dbo.SATV_REP_EXCEPTION Exception 
      Left outer Join dbo.SATV_PROCEDURE_ROLE Proc_Role ON 
       (Exception.profile_name = Proc_Role.TITLE and 
       Proc_Role.ROLE_NAME='Test-Role-POD1'))
     Left Outer Join dbo.SATV_COR_SCHEDULE_OCCURRENCE Sch_Occ on 
       Sch_Occ.BASE_NAME=Exception.BASE_NAME)
     Left outer Join dbo.SATT_ROLES Roles ON 
       (Roles.ROLE_PK=Sch_Occ.ROLE_FK and 
       Roles.ROLE_NAME='Test-Role-POD1'))
    WHERE 
      (Exception.ITEM_DATE > GETDATE() - 90) AND 
      (Exception.asset_status <> 'IN SERVICE') 
      AND Exception.BASE_NAME='Test-Base' 
      --AND (Proc_Role.ROLE_NAME='Test-Role-POD1' or Roles.ROLE_NAME='Test-Role-POD1')
    GROUP BY 
      Exception.asset_name, Exception.asset_description,
      ITEM_DATE 
    HAVING 
      (Exception.asset_name IS NOT NULL) AND 
      (asset_name <> '') 
      AND (COUNT(Exception.asset_status) > 2) 
    ORDER BY 
      CountOfasset_status1 DESC
选择
将(计数(异常.资产状态))作为资产状态1的计数,
Exception.asset\u名称,Exception.asset\u说明
从…起
(((dbo.SATV_REP_异常
左外部联接dbo.SATV_过程角色Proc_角色打开
(Exception.profile\u name=Proc\u Role.TITLE和
Proc_Role.Role_NAME='Test-Role-POD1'))
左外连接dbo.SATV\U COR\U时间表发生Sch\U Occ on
Sch_Occ.BASE_NAME=异常。BASE_NAME)
左外连接dbo.SATT_角色上的角色
(Roles.ROLE_PK=Sch_Occ.ROLE_FK和
Roles.ROLE_NAME='Test-ROLE-POD1'))
哪里
(Exception.ITEM_DATE>GETDATE()-90)和
(例外情况:资产状态为“在用”)
和异常。BASE_NAME='Test-BASE'
--和(Proc_Role.Role_NAME='Test-Role-POD1'或Roles.Role_NAME='Test-Role-POD1')
分组
Exception.asset\u名称,Exception.asset\u说明,
项目日期
有
(Exception.asset_name不为空)和
(资产名称“”)
和(计数(例外。资产状况)>2)
订购人
资产负债表状态1说明

任何帮助都将不胜感激。

不确定您想做什么,但您可能需要:

(COUNT(distinct e.asset_status) > 2) 
这会给您带来问题:

GROUP BY 
    e.asset_name, 
    e.asset_description,
    ITEM_DATE 

SELECT 
    DISTINCT(COUNT(e.asset_status)) AS CountOfasset_status1, 
    e.asset_name, 
    e.asset_description
您需要在
select
子句中包含项_date,或将其从
group by
子句中删除

sry,我给你的表格加了别名:

FROM 
    (((dbo.SATV_REP_EXCEPTION e 
    LEFT OUTER JOIN dbo.SATV_PROCEDURE_ROLE p ON 
        (e.profile_name = p.TITLE AND 
        p.ROLE_NAME='Test-Role-POD1'))
    LEFT OUTER JOIN dbo.SATV_COR_SCHEDULE_OCCURRENCE o ON 
        o.BASE_NAME=e.BASE_NAME)
    LEFT OUTER JOIN dbo.SATT_ROLES r ON 
        (r.ROLE_PK=Sch_Occ.ROLE_FK AND 
        r.ROLE_NAME='Test-Role-POD1'))
还有,这些东西:

HAVING 
    (e.asset_name IS NOT NULL) AND 
    (asset_name <> '')  AND 
具有
(e.资产名称不为空)以及
(资产名称“”)和

因为没有执行聚合函数,所以可以进入
where
子句

什么RDBMS?为什么query没有做您想要的事情?你期望的输出是什么?请在查询中使用表时标记它们。
FROM 
    (((dbo.SATV_REP_EXCEPTION e 
    LEFT OUTER JOIN dbo.SATV_PROCEDURE_ROLE p ON 
        (e.profile_name = p.TITLE AND 
        p.ROLE_NAME='Test-Role-POD1'))
    LEFT OUTER JOIN dbo.SATV_COR_SCHEDULE_OCCURRENCE o ON 
        o.BASE_NAME=e.BASE_NAME)
    LEFT OUTER JOIN dbo.SATT_ROLES r ON 
        (r.ROLE_PK=Sch_Occ.ROLE_FK AND 
        r.ROLE_NAME='Test-Role-POD1'))
HAVING 
    (e.asset_name IS NOT NULL) AND 
    (asset_name <> '')  AND