在SQL中使用内部联接时缺少关键字错误

时间:2012-05-31 10:51:43

标签: sql inner-join

我是SQL的新手,因此在增强SQL查询方面遇到了一些问题。

基本上有两个表:一个是ef_dat_app_ef_link,另一个是ef_dat_lspd_machine_type_model

这是我所说的查询。我在第10行添加了一个内连接,这是所有问题的基础。

select country_isocode as country,
language_isocode as language, model_number,
machine_type_model_name model_name,machine_type_group_id,
machine_type_model_id, product_type_name product_type,
machine_type_model_id_to,filenet_link 
from ef_dat_lspd_machine_type_model,
cross join ef_dim_lspd_country_language
left join ef_dat_lspd_model_country 
using (machine_type_model_id, country_isocode)
inner join ef_dat_app_ef_link on  (ef_dat_lspd_machine_type_model.lpmd_revenue_pid = ef_dat_app_ef_link.ef_product_revenue_pid)
where (ef_dat_app_ef_link.country_isocode='US' or ef_dat_app_ef_link.country_isocode='CA') and ef_dat_app_ef_link.language_isocode='en'
join ef_dat_lspd_product_type using (product_type_id)
left join ef_dat_lspd_model_relationship on (machine_type_model_id_from = machine_type_model_id) 
where (discontinue_date is null or discontinue_date > sysdate) and
(announce_date is null or announce_date <= sysdate)
and (machine_type_model_id in (select machine_type_model_id from ef_dat_lspd_model_parts)
or not machine_type_model_id_to is null) order by machine_type_model_id

以下是我应该处理的未更改的查询。

select  country_isocode as country,
language_isocode as language,


machine_type_model_id,
product_type_name product_type,machine_type_model_id_to,
image_url
from ef_dat_lspd_machine_type_model cross join ef_dim_lspd_country_language 
left join ef_dat_lspd_model_country using (machine_type_model_id, country_isocode) 
join ef_dat_lspd_product_type using (product_type_id) 
left join ef_dat_lspd_model_relationship on (machine_type_model_id_from =    machine_type_model_id)
where (discontinue_date is null or discontinue_date > sysdate) and
(announce_date is null or announce_date <= sysdate) and
(machine_type_model_id in (select machine_type_model_id from ef_dat_lspd_model_parts) or >not machine_type_model_id_to is null)
order by machine_type_model_id

现在在ef_dat_app_ef_link表中有一个链接包含图片,国家代码和语言代码以及一个revenueid,另一个是ef_dat_lspd_machine_type_model,其中包含图片链接和更多列。我要做的是,创建一个查询,该查询将替换ef_dat_app_ef_link表中的上拉图像,其中此表中的收入ID等于另一个表中的收入ID。当按收入ID搜索表格时,会出现很多列,这就是为什么我要提取一行语言为“en”且国家/地区为“US”或“CA”。

我已经为同一个效果添加了一个内部连接语句,但它一直在为丢失的关键字抛出ORA00905错误。

我将所做的更改用斜体显示。很抱歉代码有这么糟糕的表现。我无法做出如何让它看起来更好的头或尾。

2 个答案:

答案 0 :(得分:2)

您在现有查询的中间添加了WHERE子句smack dab。查询中不能有多个WHERE子句,也不能将它放在表连接的中间。

illustrated issue

将您添加的WHERE子句合并到预先存在的子句中(由快照中的绿色箭头指示)。

答案 1 :(得分:1)

你不能像你必须那样混合结构

select *
from t
join t1
join t2
where 
and
or
order by

你不能这样做

select *
from t
join t2
where
order 
join 
where
order 

select country_isocode as country,
language_isocode as language, model_number,
machine_type_model_name model_name,machine_type_group_id,    
machine_type_model_id, product_type_name product_type,
machine_type_model_id_to,filenet_link 
from ef_dat_lspd_machine_type_model
cross join ef_dim_lspd_country_language
left join ef_dat_lspd_model_country 
using (machine_type_model_id, country_isocode)
inner join ef_dat_app_ef_link on  (ef_dat_lspd_machine_type_model.lpmd_revenue_pid = ef_dat_app_ef_link.ef_product_revenue_pid)
join ef_dat_lspd_product_type using (product_type_id)
left join ef_dat_lspd_model_relationship on (machine_type_model_id_from = machine_type_model_id) 
where (ef_dat_app_ef_link.country_isocode='US' or ef_dat_app_ef_link.country_isocode='CA') and ef_dat_app_ef_link.language_isocode='en'
and (discontinue_date is null or discontinue_date > sysdate) and
(announce_date is null or announce_date <= sysdate)
and (machine_type_model_id in (select machine_type_model_id from ef_dat_lspd_model_parts)
or not machine_type_model_id_to is null) order by machine_type_model_id