0

我的目标是,在 2013 年查看所有的房地产观众和计划的观众。我相信我已经完成了 90% 的解决方案,但目前,它不起作用。

使用中的表

* yr_viewer*

Clientnum, CHAR(5), NOT nullable (PRIMARY KEY 1) 
Branchnum, CHAR(3), NOT nullable (PRIMARY KEY 2)  
Prefferedtype, VARCHAR2(15),  nullable 
MAXIMUMRENT, NUMBER (17,2),  nullable 
Finished, NUMBER(1,0),  nullable 

yr_viewing

propertynum, CHAR(5), NOT nullable (PRIMARY KEY 1) 
dateviewed, Date  nullable (format - 1-jan-2013)
Clientnum, CHAR(5), NOT nullable (PRIMARY KEY 2) 
Staffnum,  CHAR(5),  nullable 
Comments,  VARCHAR2 (300),  nullable 

yr_Client

Clientnum, CHAR(5), NOT nullable (PRIMARY KEY 1) 
Firstname Varchar2(20), nullable
Lastname  Varchar2(20), nullable
Address   Varchar2(50), nullable
Telephonenum Char (13), nullable

我的查询

select distinct c.Firstname, c.Lastname, v.PropertyNum, v.DateViewed
 from yr_viewing, yr_viewer i
      inner join YR_VIEWING v
         on i.ClientNum = v.ClientNum
      inner join YR_CLIENT c
         on i.ClientNum = c.ClientNum
where dateviewed between '01-jan-2013' and '31-dec-2013'
4

3 回答 3

1

回答:

select distinct c.Firstname, c.Lastname, v.PropertyNum, v.DateViewed
  from yr_viewer VV
 inner join YR_VIEWING v
    on VV.ClientNum = v.ClientNum
 inner join YR_CLIENT c
    on V.ClientNum = c.ClientNum
 where TO_CHAR(dateviewed, 'yyyy') = '2013'

编辑:双引号(Alex 的建议)

于 2013-04-26T17:01:32.837 回答
1

你的连接有一些问题。yr_viewing您正在与交叉加入yr_viewer,然后yr_viewing再次加入。

您不会从中提取任何列yr_viewer,因此将其完全排除在查询之外。而且您无需包含yr_viewing两次。尝试这样的事情:

select distinct c.Firstname, c.Lastname, v.PropertyNum, v.DateViewed
  from yr_viewing v
  inner join YR_CLIENT c on i.ClientNum = c.ClientNum
  where dateviewed between '01-jan-2013' and '31-dec-2013'

还有一件事:您的日期只有在 OracleNLS_DATE_FORMAT设置为 DD-MON-YYYY 时才有效,而通常情况下并非如此。即使是你也不应该相信它。最好使用 ANSI 日期文字并将您的WHERE子句更改如下:

where dateviewed between DATE '2013-01-01' and DATE '2013-12-31'
于 2013-04-26T17:03:22.687 回答
0

免责声明:我没有任何 oracle 经验,但我经常处理 mysql 和 sql server,所以这可能会也可能不会。

你确定你应该使用内连接而不是左连接吗?使用内部联接将仅显示显示既是客户又是查看者的人的结果。

你的陈述似乎也有点时髦......你正在做一个隐式连接,然后通过同一张表的显式内部连接来跟随它......

也许这样的事情会更好:

select distinct c.Firstname, c.Lastname, v.PropertyNum, v.DateViewed
from yr_viewing v
LEFT JOIN yr_viewer i
on i.ClientNum = v.ClientNum
LEFT JOIN YR_CLIENT c
on i.ClientNum = c.ClientNum
where dateviewed
between '01-jan-2013' and '31-dec-2013'
;
于 2013-04-26T17:02:41.337 回答