【问题标题】:SQL query not returning all data - only half of itSQL 查询未返回所有数据 - 仅返回一半
【发布时间】:2018-06-21 17:30:35
【问题描述】:

我有一个 SQL 查询,它只提取 2012 年至 2014 年的数据。但是,我知道自 2018 年以来还有更多数据,但它没有提取数据。我需要把它带到它拉所有日期的地方。这是我的代码。

select 
    PA.STUD_ID AS STUDENT_ID,
    LS.SEQ_NUM AS SEQ_NUM,
    LS.LOGIN_ID AS LOGIN_ID,
    LS.LOGIN_TYPE AS LOGIN_TYPE,
    LS.SESSION_ID AS SESSION_ID,
    LS.LOGIN_TIME AS LOGIN_TIME,
    LS.LOGOUT_TIME AS LOGOUT_TIME,
    LS.LST_UPD_USR AS LAST_USER_UPDATED,
    LS.LST_UPD_TSTMP AS LAST_TIME_STAMP,
    LA.ATTEMPT_SUCCESSFUL AS SUCCESSFUL_ATTEMPT
FROM
    PA_STUDENT PA,
    PA_STUD_LOGIN_ATTEMPT LA,
    PA_LOGIN_SESSION_INFO LS
WHERE 
    PA.STUD_ID = LA.STUD_ID
    AND LA.SEQ_NUM = LS.SEQ_NUM
    /** AND LOGIN_TIME >= [AuditDateRangeFrom] 
    AND NOT LOGIN_TIME > [AuditDateRangeTo] */
    /** AND [security:PA_STUDENT PA] 
    */

【问题讨论】:

  • 您很可能需要改用outer joins。数据是否仅存在于其中 1 个表中?一般来说,我建议不要在from 子句中使用逗号,而是使用明确的joins
  • 您需要发布示例数据,以便我们重现您的问题。从逻辑上讲,您的查询似乎没有问题(尽管在语法上,您应该明确地编写连接而不是使用旧语法)。
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 多年前),不鼓励使用它

标签: sql report birt


【解决方案1】:

根据您尝试返回的字段的语法,您的表似乎被命名为“PA”、“LS”和“LA”。如果是这种情况,您的 FROM 部分应该类似于:

FROM PA OUTER JOIN LA ON PA.STUD_ID = LA.STUD_ID OUTER JOIN LS ON LA.SEQ_NUM = LS.SEQ_NUM

您似乎正在尝试使用 WHERE 子句来告诉表如何连接,但这应该在 FROM 子句中。

基本上,除非您的表实际上被命名为 "PA_STUDENT PA" ,否则您在 FROM 子句中的语法没有意义,但如果是这种情况,您的 SELECT 部分就没有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多