-1 sql-server sql-server-2008-r2
我正在运行一个查询来显示LastName
和Hire_Date
我的结果显示列但不包含任何数据。这是在线课程的作业,我已经等了两天老师的回复。
这是我的声明,他希望我将其作为JOIN
显示BETWEEN
声明运行,即使信息在一个表 ( EmployeeT
) 中:
SELECT LastName, Hire_Date
FROM EmployeeT, Job_TitleT
WHERE EmployeeT.Job_TitleID = Job_TitleT.Job_TitleID
AND Hire_Date BETWEEN '2003-1-1' and '2003-12-31'
Run Code Online (Sandbox Code Playgroud)
假设Hire_Date
是DATETIME
你应该这样做:
SELECT e.LastName, e.HireDate -- properly denote which table a column comes from
FROM dbo.EmployeeT AS e -- use schema prefix and use meaningful aliases
INNER JOIN dbo.Job_TitleT AS t -- use proper, explicit JOINs instead of 1970s syntax
ON e.Job_TitleID = t.Job_TitleID
WHERE e.Hire_Date >= '20030101'-- this should be a filter (WHERE), not join criteria
AND e.Hire_Date < '20040101';
Run Code Online (Sandbox Code Playgroud)
我BETWEEN
之所以回避是因为,如果Hire_Date
是DATETIME
,则可能有人在 12 月 31 日上午 8 点被聘用,而此人将被排除在您的BETWEEN
条款之外。更多信息在这里。<---请让您的导师阅读此内容!
如果这是日期/时间数据类型而不是字符串,并且此查询返回零行,那么要么您没有 2003 年的任何数据,要么您正在针对错误的数据库副本运行。您的连接字符串是否AttachDbFileName
有机会使用?如果是这种情况,那么您可能会在 Visual Studio 中看到数据库的一个副本,而在 Management Studio 或运行此查询的任何地方,您正在查看不同的(空)副本。
这对我来说很好用,所以你必须有所不同(试图演示使用SQLfiddle但 SQL Server 组件当前已关闭):
如果这对您不起作用(请TempDB
在其他数据库中或在其他数据库中尝试),那么您要么查看了错误的表,要么误解了数据。
而在这里,我们走了,工作SQLfiddle例子。请仔细查看并描述它与您正在运行的查询之间的不同之处。
归档时间: |
|
查看次数: |
6194 次 |
最近记录: |