Oracle SQL DB select muti join error join error-ORA-00933:SQL命令未正确结束
我试图连接几个表以获取数据,这里的问题是,当我应用过滤器时,我无法获取数据,我得到以下错误 以下是表格 在我的例子中,在加入表时引用的外键以_UID结尾Oracle SQL DB select muti join error join error-ORA-00933:SQL命令未正确结束,sql,oracle,Sql,Oracle,我试图连接几个表以获取数据,这里的问题是,当我应用过滤器时,我无法获取数据,我得到以下错误 以下是表格 在我的例子中,在加入表时引用的外键以_UID结尾 TBL_ABC_CUSTOMER_D TBL_BBC_CUSTOMER_STATUS_D TBL_NBC_CUSTOMER_TYPE_D TBL_KBC_CUSTOMER_SEGMENT_TYPE_D TBL_NCC_CUSTOMER_SEGMENT_D SQL查询 SELECT ABC.ABC_DES_NAME, ABC.ABC
TBL_ABC_CUSTOMER_D
TBL_BBC_CUSTOMER_STATUS_D
TBL_NBC_CUSTOMER_TYPE_D
TBL_KBC_CUSTOMER_SEGMENT_TYPE_D
TBL_NCC_CUSTOMER_SEGMENT_D
SQL查询
SELECT
ABC.ABC_DES_NAME,
ABC.ABC_DES_LASTNAME,
ABC.ABC_DAT_BIRTH_DATE,
ABC.ABC_LOC,
ABC.ABC_MOBILE_NUM,
ABC.ABC_FLG_GENDER,
ABC.ABC_EMAIL,
ABC.TBL_SYSTEM,
ABC.TBL_EFFECTIVE_ON,
ABC.TBL_EXPIRED_ON
FROM
DWH_SCHEMA.TBL_ABC_CUSTOMER_D ABC /*CUSTOMER 1*/
JOIN
DWH_SCHEMA.TBL_BBC_CUSTOMER_STATUS_D BBC /*CUSTOMER STATUS 2*/
ON ABC.BBC_COD_CUSTOMER_STATUS_UID = BBC.BBC_COD_CUSTOMER_STATUS_UID
and ABC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') --/*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
and BBC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') --/*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
JOIN
DWH_SCHEMA.TBL_NBC_CUSTOMER_TYPE_D NBC /*CUSTOMER SUPPLIER 3*/
ON ABC.NBC_COD_CUSTOMER_TYPE_UID = NBC.NBC_COD_CUSTOMER_TYPE_UID
and ABC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') /*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
and NBC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') /*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
JOIN
DWH_SCHEMA.TBL_KBC_CUSTOMER_SEGMENT_TYPE_D KBC /*CUSTOMER SEGMENT TYPE 4*/
ON ABC.KBC_COD_SEGMENT_TYPE_UID = KBC.KBC_COD_SEGMENT_TYPE_UID
and ABC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') /*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
and KBC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') /*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
JOIN
DWH_SCHEMA.TBL_NCC_CUSTOMER_SEGMENT_D NCC /*CUSTOMER SEGMENT 5*/
ON ABC.NCC_COD_SEGMENT_UID = NCC.NCC_COD_SEGMENT_UID
and ABC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') /*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
and NCC.TBL_EXPIRED_ON = TO_DATE('31.12.9999', 'DD.MM.YYYY') /*IT ALLOWS YOU TO CONSIDER THE LAST SNAPSHOT FOR EACH TABLE*/
错误
ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Error at Line: 9 Column: 1
如何解决上述错误?先加入,然后加入条件 否: 是的:
将其应用于您的代码。您也可以在
加入语句中添加条件作为和
。您好@Del谢谢您的建议,您能检查一下我是否能够运行查询,它运行得很好,但我有几个问题1)如果我将where替换为并且它正在工作,有什么区别,既然我在所有表中过滤相同的条件,那么有没有更好的方法以更好的方式进行重组?任何建议hi@Littlefoot,感谢您的建议,您能检查一下我是否能够运行查询,它运行得很好,但我有几个问题1)如果我将where替换为,它正在工作,有什么区别,因为我在所有表中过滤相同的条件,有没有更好的方法以更好的方式进行重组?有什么建议吗?不客气。区别在于过滤发生的“时刻”——在联接之前(这是您现在的方式;它表示“从这个表中过滤行,从那个表中过滤行,然后联接其余的行),或者联接之后(如果在所有联接完成后将所有这些过滤器放入where子句中)。
from emp e
where e.job = 'SALESMAN'
join dept d on d.deptno = e.deptno
where d.loc = 'LONDON'
from emp e join dept d on d.deptno = e.deptno
where e.job = 'SALESMAN'
and d.loc = 'LONDON'