Oracle SQL多表

Oracle SQL多表,sql,oracle,Sql,Oracle,一般来说,我对SQL还很熟悉,所以这可能不是一个措辞最好的问题。我想从不同的表中获取列。它们没有任何公共列,但有第三个表,其中包含能够将它们链接在一起的信息 这就是我一直尝试的方式: SELECT CI_SA.ACCT_ID, CI_SA.EXPIRE_DT WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17', CI_SP.SP_TYPE_CD WHERE SP_TYPE_CD='G-RES' FROM CI_SA I

一般来说,我对SQL还很熟悉,所以这可能不是一个措辞最好的问题。我想从不同的表中获取列。它们没有任何公共列,但有第三个表,其中包含能够将它们链接在一起的信息

这就是我一直尝试的方式:

SELECT 
    CI_SA.ACCT_ID,
    CI_SA.EXPIRE_DT WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17',
    CI_SP.SP_TYPE_CD WHERE SP_TYPE_CD='G-RES'
FROM CI_SA
INNER JOIN CI_SA ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND CI_SP.SP_ID =  
CI_SA_SP.SP_ID
这就是我得到的回报: ORA-00923:未在预期位置找到FROM关键字 92300000-未在预期位置找到FROM关键字 *原因: *行动: 第3行第18列出现错误


任何人都可以告诉我哪里出错了?

表格中的where条件应该在后面 例如,从选项卡1中选择*,其中

试着这样做:

SELECT 
    CI_SA.ACCT_ID,
    CI_SA.EXPIRE_DT ,
    CI_SP.SP_TYPE_CD 
FROM CI_SA
INNER JOIN CI_SA ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND CI_SP.SP_ID =  
CI_SA_SP.SP_ID
WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17'
and SP_TYPE_CD='G-RES'
同样作为用户artur通知,您是否加入CI_SA?还是西萨普?如果CI_SA您也添加了别名,如下所示:


内部连接CI_SA CI_SA_SP…

where子句应位于末尾:

SELECT 
    CI_SA.ACCT_ID,
    CI_SA.EXPIRE_DT ,
    CI_SP.SP_TYPE_CD 
FROM CI_SA
INNER JOIN CI_SA ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND CI_SP.SP_ID =  
CI_SA_SP.SP_ID
WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17' and SP_TYPE_CD='G-RES'
WHERE子句位于FROM之后,并且每次选择仅显示一次

也许你打算:

SELECT CI_SA.ACCT_ID, CI_SA.EXPIRE_DT, CI_SP.SP_TYPE_CD 
FROM CI_SA INNER JOIN
     CI_SA_SP
     ON CI_SA.SA_ID = CI_SA_SP.SA_ID AND
        CI_SP.SP_ID = CI_SA_SP.SP_ID
WHERE CI_SA.EXPIRE_DT BETWEEN DATE '2017-04-15' AND DATE '2017-04-30' AND
      CI_SP.SP_TYPE_CD = 'G-RES';

此外,这修复了FROM子句,因此它引用了CI_SA_SP。另外,我强烈建议使用ISO标准日期格式,因此这将使用日期关键字。

首先“选择”,然后“从”,最后“从哪里”。只允许使用一个“WHERE”子句。
联接中的重复CI_SA。除了其他人所说的以外,你还应该使用别名。where子句位于错误的位置,您还需要正确地联接表。我想你想要的是:

SELECT CI_SA.ACCT_ID,
       CI_SA.EXPIRE_DT WHERE EXPIRE_DT BETWEEN '15-APR-17' AND '30-APR-17',
       CI_SP.SP_TYPE_CD WHERE SP_TYPE_CD='G-RES'
FROM   CI_SA
       INNER JOIN CI_SA_SP ON CI_SA.SA_ID = CI_SA_SP.SA_ID 
       INNER JOIN CI_SP ON CI_SP.SP_ID = CI_SA_SP.SP_ID
WHERE  CI_SA.EXPIRE_DT BETWEEN TO_DATE('01/04/2017', 'DD/MM/YYYY') AND TO_DATE('30/04/2017', 'DD/MM/YYYY')
AND    CI_SP.SP_TYPE_CD = 'G-RES';

编辑您的问题并提供示例数据和所需结果。您的语法与标准SQL相去甚远,其意图尚不清楚。感谢您的澄清!我假设我能够将连接分组在一起,但事实并非如此。现在一切正常运转