0

我是 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 表中有一个包含图像、国家代码和语言代码的链接以及一个收入 ID,另一个是 ef_dat_lspd_machine_type_model,其中包含图像链接和更多列。我想要做的是,创建一个查询,它将替换 ef_dat_app_ef_link 表中的拉取图像,其中该表中的收入 ID 等于另一个表中的收入 ID。当按收入 ID 搜索表格时会出现很多列,这就是为什么我想拉出一行语言为“en”,国家为“US”或“CA”的行。

我添加了一个内部连接语句以达到相同的效果,但它始终为缺少的关键字引发 ORA00905 错误。

我已将我所做的更改用斜体表示。抱歉,代码的表现如此糟糕。我无法弄清楚如何让它看起来更好。

4

2 回答 2

2

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

图解问题

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

于 2012-05-31T10:56:30.033 回答
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
于 2012-05-31T10:56:05.727 回答