【问题标题】:oracle, query joining issues "SQL command not properly ended"oracle,查询加入问题“SQL命令未正确结束”
【发布时间】:2014-05-12 04:44:19
【问题描述】:

我想在oracle中加入2个SQL查询,但我真的不熟悉,我的结构对我来说似乎是正确的,但我有这个SQL错误消息:“[Err] ORA-00933: SQL command not正确结束”

所以我有两个疑问: 第一个是:

select 
    campaign_id, count(*) as "number of emails sent"
from 
    dg_res_sent
where 
    dg_end_date > sysdate
group by campaign_id

第二个是:

select 
    offer_name, 
    campaign_id, 
    offer_category as "link category", 
    count(*) as "number of clicks"
from 
    dg_res_click
where
    dg_end_date > sysdate
and
    SUBSTR(offer_name,1,3) = 'SKU'
group by 
    offer_name, 
    campaign_id, 
    offer_category

我想加入campaign_id,所以我做到了:

select 
    offer_name, 
    campaign_id, 
    offer_category as "link category", 
    count(*) as "number of clicks",
    sent.nb_sent
from 
    dg_res_click
where
    dg_end_date > sysdate
and
    SUBSTR(offer_name,1,3) = 'SKU'
inner join
    (select 
        campaign_id, count(*) as "nb_sent"
    from 
        dg_res_sent
    where 
        dg_end_date > sysdate
    group by campaign_id) sent
on 
    sent.campaign_id = dg_res_click.campaign_id
group by 
    offer_name, 
    campaign_id, 
    offer_category

知道为什么我会收到此消息:

[Err] ORA-00933: SQL 命令未正确结束

【问题讨论】:

  • 内连接不应该放在where子句之前吗?
  • 我删除了 MySQL 和 SQL Server 标签,因为这个问题是关于 Oracle 的。

标签: sql oracle join


【解决方案1】:

你的内连接应该放在你的 where 子句之前。

【讨论】:

    【解决方案2】:

    你把inner join放在了错误的位置。它应该在where子句之前

    select 
        dg_res_click.offer_name, 
        dg_res_click.campaign_id, 
        dg_res_click.offer_category as "link category", 
        count(*) as "number of clicks",
        sent.nb_sent
    from 
        dg_res_click 
    inner join
        (select 
            campaign_id, count(*) as nb_sent
        from 
            dg_res_sent
        where 
            dg_end_date > sysdate
        group by campaign_id) sent
    on 
        sent.campaign_id = dg_res_click.campaign_id
    
    where
        dg_res_click .dg_end_date > sysdate
    and
        SUBSTR(dg_res_click.offer_name,1,3) = 'SKU'
    group by 
        dg_res_click.offer_name, 
        dg_res_click.campaign_id, 
        dg_res_click.offer_category,
        sent.nb_sent
    

    【讨论】:

    • 谢谢,这对我来说似乎是正确的,但我收到了以下错误消息:“"SENT"."NB_SENT": invalid identifier"
    • 但它不再是字符串了,不是吗?
    • 它只是一个别名,所以不需要引号
    • 而在mysql中,反引号用于字符串..`nb sent`
    • 在您的第一个选择中应该是 dg_res_click.offer_name 和 dg_res_click.campaign_id 而不是 sent.offer_name 和 sent.campaign_id ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多