2017-06-20 101 views
0

我有一个问题,关于那我就无法检索到正确的结果

SELECT distinct companyid, 
     companyshortname, 
     loanamount, 
     employeename, 
     , employeerole, 
     MaxTime, 
     businessdescription 
FROM  company 
INNER JOIN loan ON companyfkey = loanfkey 
LEFT JOIN (SELECT businessdescription_fkey, 
        MAX(w.business_date_transaction_occured) AS MaxTime 
      FROM businessdescription w 
      WHERE w.businessstatus <> 3 <-- this means that the company is still open 
      GROUP BY w.businessdescription_fkey) wf 
ON company_fkey = businessdescriotion_fkey 

工作这回我有一个状态比3个不同的所有企业一个SQL脚本,但我的第一个问题是它返回给我的所有业务,确实有状态3.

我的第二个问题是我将如何纳入另一个值来跟踪如Businessdescriptioncomment我会做这样的事情?

LEFT JOIN (SELECT businessdescription_fkey, 
        MAX(w.business_date_transaction_occured) AS MaxTime , 
        w.businessdescriptioncomment AS BusinessComment 
      FROM businessdescription w   
      WHERE w.businessstatus <> 3 <-- this means that the company is open 
      GROUP BY w.businessdescription_fkey) wf 
ON company_fkey = businessdescriotion_fkey 

和我的变量BusinessComment到我的第一个选择?

感谢您的任何帮助。

+0

您是否检查过内部选择? 它只是返回business = 3的行吗? 如果是这样,也许更改左加入INNER加入 –

+1

有一个双','这里:'employeename,,employeerole,' – McNets

+0

你的问题是不清楚..你有错误吗? ...错误的结果...? .. – scaisEdge

回答

0

改变你的第二个加入这样的:

INNER JOIN businessdescription w 
ON company_fkey = w.businessdescriotion_fkey 
and businessstatus <> 3 

在你选择放:

SELECT distinct companyid, 
     companyshortname, 
     loanamount, 
     employeename, 
     employeerole, 
     MaxTime, 
     businessdescription, 
     w.businessdescriptioncomment 
FROM company 

告诉我,如果你的作品

0

在你JOIN子查询,你添加过滤器businessstatus <> 3排除id 3。但这是一个左加入。在这种情况下,它将带来第一张表格中的所有内容,包括您的案例公司和负载。

用INNER JOIN替换LEFT JOIN。

您是否有任何其他有效的LEFT JOIN原因。

1

而不是Left Join使用内部加入,因为它只会给记录公司如果打开。另外,我已经使用self join在子查询来获取Business Comment,然后用它在外部选择查询

试试这个: -

SELECT distinct companyid, 
     companyshortname, 
     loanamount, 
     employeename, 
     , employeerole, 
     MaxTime, 
     businessdescription, 
     BusinessComment 
FROM  company a 

INNER JOIN loan b 
ON a.companyfkey = b.loanfkey 

INNER JOIN 
(
    SELECT a.businessdescription_fkey, a.MaxTime, w.businessdescriptioncomment AS BusinessComment 
    FROM 
    (
    SELECT businessdescription_fkey, 
         MAX(w.business_date_transaction_occured) AS MaxTime 
       FROM businessdescription w   
       WHERE w.businessstatus <> 3 
       GROUP BY w.businessdescription_fkey 
    ) a 
    INNER JOIN 
    businessdescription w 
    ON a.businessdescription_fkey=w.businessdescription_fkey AND a.MaxTime=w.business_date_transaction_occured 
    WHERE w.businessstatus <> 3 
) c 
ON a.company_fkey = c.businessdescriotion_fkey 

让我知道如果您有任何疑问

+0

谢谢你,作品! – artbarzz

+0

@ artbarzz欢迎您。乐于帮助。如果您喜欢解决方案,您可以接受。请访问此链接https://stackoverflow.com/help/someone-answers了解更多信息 –

0

虽然你有在子查询中给出where条件(businessstatus <> 3),它仅对子查询进行筛选,因此如果使用子查询进行左连接,则返回左表加右表的结果,其中某行显示Null列(在此案例(businessstatus == 3将为空)

使用内部连接而不是左连接可以给出bussinessstatus的结果<> 3