首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新后的SQL查询即使使用交叉联接也不返回数据。

更新后的SQL查询即使使用交叉联接也不返回数据。
EN

Stack Overflow用户
提问于 2014-10-28 10:39:55
回答 1查看 31关注 0票数 0

因此,我一直在替换应用程序中的所有旧查询,以删除*=操作符。在其中一个查询中,我很难弄清楚为什么输出是不同的。

这是一个古老的问题:

代码语言:javascript
复制
 SELECT 
    URMS_User_Name AS FE_Name,
    URMS_User_ID AS FE_Code, 
    COUNT( MRFS_FE_Code ) AS No_Of_Jobs, 
    SCRM_Service_Center_Name AS Service_Center_Name, 
    CSMSDVLP.fnGetExpertise( URMS_User_ID ) AS Expertise 
 FROM 
    TBL_User_Master, 
    TBL_Service_Center_Master, 
    TBL_User_Role, 
    TBL_MR_FE_Schedule 
 WHERE                
    USRL_Role_Code = 'FE' AND
    URMS_User_ID = USRL_User_ID AND      
    SCRM_Service_Center_ID = URMS_Service_Center_ID AND
    URMS_User_ID *= MRFS_FE_Code AND
    MRFS_Scheduled_Date >= '28-Oct-2014 00:00:00' AND 
    MRFS_Scheduled_Date <= '04-Nov-2014 00:00:00' 
 GROUP BY 
    SCRM_Service_Center_Name,
    URMS_User_Name,
    URMS_User_ID 
 ORDER BY 
    URMS_User_ID

这是更新的查询:

代码语言:javascript
复制
SELECT 
    URMS_User_Name AS FE_Name,
    URMS_User_ID AS FE_Code,
    COUNT( MRFS_FE_Code ) AS No_Of_Jobs,
    SCRM_Service_Center_Name AS Service_Center_Name, 
    CSMSDVLP.fnGetExpertise( URMS_User_ID ) AS Expertise 
FROM 
    TBL_User_Master 
    Left Join TBL_MR_FE_Schedule 
       ON URMS_User_ID = MRFS_FE_Code 
    Inner Join TBL_Service_Center_Master 
       ON SCRM_Service_Center_ID = URMS_Service_Center_ID 
    Inner Join TBL_User_Role 
       ON URMS_User_ID = USRL_User_ID 
WHERE 
    USRL_Role_Code = 'FE'
    AND MRFS_Scheduled_Date >= '28-Oct-2014 00:00:00' 
    AND MRFS_Scheduled_Date <= '04-Nov-2014 00:00:00' 
GROUP BY 
    SCRM_Service_Center_Name,
    URMS_User_Name, 
    URMS_User_ID 
ORDER BY 
    URMS_User_ID

旧的查询很好地返回数据,但是新的查询返回空行。我试着用交叉连接和相同的问题替换所有的联接。

不过,奇怪的是,如果我在没有日期条件的情况下运行查询,一切似乎都正常。所以,现在,我搞不懂是我犯了一个错误,还是那个老操作员表现得很疯狂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 10:57:32

外部连接表的条件属于on子句。外部连接记录的MRFS_Scheduled_Date为NULL,所以使用WHERE子句删除这些记录,从而将外部连接转换为内部连接。由于WHERE子句比以前限制性更强,这可能是没有得到任何结果的原因。

代码语言:javascript
复制
SELECT 
  URMS_User_Name AS FE_Name, 
  URMS_User_ID AS FE_Code, 
  COUNT( MRFS_FE_Code ) AS No_Of_Jobs, 
  SCRM_Service_Center_Name AS Service_Center_Name, 
  CSMSDVLP.fnGetExpertise( URMS_User_ID ) AS Expertise 
FROM TBL_User_Master 
LEFT JOIN TBL_MR_FE_Schedule ON URMS_User_ID = MRFS_FE_Code AND MRFS_Scheduled_Date >= '28-Oct-2014 00:00:00' AND MRFS_Scheduled_Date <= '04-Nov-2014 00:00:00' 
INNER JOIN TBL_Service_Center_Master ON SCRM_Service_Center_ID = URMS_Service_Center_ID 
INNER JOIN TBL_User_Role ON URMS_User_ID = USRL_User_ID 
WHERE USRL_Role_Code = 'FE'  
GROUP BY SCRM_Service_Center_Name, URMS_User_Name, URMS_User_ID 
ORDER BY URMS_User_ID;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26606211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档