SQL从表中选择两次

时间:2014-02-10 16:34:40

标签: sql join

我试图在SQL中两次从同一个表中进行选择。

我有一个POLICIES表,它有一个引用自身的索引(NEXTPOLICYID)。

我需要将当前的保费与估计的保费进行比较。

如何获得在同一结果行上显示以下内容的结果?

t1 =当前 t2 =未来

End result should be:

t1.POLICIES_ID | t1.WRITTEN_PREMIUM | t2.POLICIES_ID | t2.ESTIMATED_PREMIUM

这就是我现在所拥有的,我在加入声明中收到错误,但我担心这不是我唯一的问题。

SELECT 
    t1.POLICIES_ID, t1.WRITTEN_PREMIUM, t1.NEXTPOLICYID, t2.ESTIMATED_PREMIUM
FROM 
    POLICIES t1 JOIN
    POLICIES t2
    ON t1.NEXTPOLICYID = t2.POLICIES_ID

我收到以下错误:

Message: odbc_exec(): SQL error: [Rocket U2][UVODBC][1401233]Error ID: 29 Severity: ERROR Facility: FPSRVERR - Line 5, column 17 (around "JOIN"): Syntax error., SQL state S1000 in SQLExecDirect

这是与uniVerse数据库的ODBC连接,我已经使用许多其他功能对其进行了测试,并且工作正常。这个错误告诉我它在JOIN语句之前不喜欢它。

谢谢

2 个答案:

答案 0 :(得分:1)

此:

SELECT
    t1.POLICIES_ID,
    t1.WRITTEN_PREMIUM
    t1.NEXTPOLICYID,
    t2.ESTIMATED_PREMIUM,
    t2.POLICIES_ID
FROM 
    POLICIES t1,
    JOIN POLICIES t2 ON t1.NEXTPOLICYID = t2.POLICIES_ID

在错误的地方有逗号的问题,应该是:

SELECT
    t1.POLICIES_ID,
    t1.WRITTEN_PREMIUM,
    t1.NEXTPOLICYID,
    t2.ESTIMATED_PREMIUM,
    t2.POLICIES_ID
FROM 
    POLICIES t1
    JOIN POLICIES t2 ON t1.NEXTPOLICYID = t2.POLICIES_ID

我猜这是错误的原因。

答案 1 :(得分:1)

除了逗号之外,唯一的其他问题是:

  • 您无需在t2.POLICIES_ID列表中加入select,因为您有t1.NEXTPOLICYID
  • 您可能需要考虑left outer join,以保留没有下一个政策的政策。

查询可能是:

 SELECT t1.POLICIES_ID, t1.WRITTEN_PREMIUM, t1.NEXTPOLICYID,
        t2.ESTIMATED_PREMIUM
 FROM POLICIES t1 JOIN
      POLICIES t2
      ON t1.NEXTPOLICYID = t2.POLICIES_ID;