如何将表联接到通过查询创建的表

时间:2019-06-22 20:47:05

标签: sql join

我查询以获取IP的前5个结果,然后我想通过联接获取每个IP,国家和其他与之相关的字段。

select actual_ip, actual_country_code, actual_country_name, organization  FROM "public"."bus_request" inner join (
    select top 5 actual_ip, count(*) FROM "public"."bus_request" 
    where app_name = 'xxxxx' and request_score>0 and date >= '2019-06-07' and event_type <> 'browser_js' 
    group by actual_ip order by count desc ) as temp on  actual_ip = temp.actual_ip

SQL Error [500310] [42702]: [Amazon](500310) Invalid operation: column reference "actual_ip" is ambiguous;

2 个答案:

答案 0 :(得分:0)

不确定确切使用的是哪个DBMS,但尝试通过指定表来解决歧义,例如:

select busreq.actual_ip, actual_country_code, actual_country_name, organization  FROM "public"."bus_request" as busreq inner join (
    select top 5 actual_ip, count(*) FROM "public"."bus_request" 
    where app_name = 'xxxxx' and request_score>0 and date >= '2019-06-07' and event_type <> 'browser_js' 
    group by actual_ip order by count desc ) as temp on busreq.actual_ip = temp.actual_ip

(您可能需要消除actual_ip的内部用法的歧义-但希望不会。)

答案 1 :(得分:0)

您应该始终限定查询多个表的查询中的所有列引用。另外,您应该使用表别名,以便查询更易于编写和阅读:

select br.actual_ip, br.actual_country_code, br.actual_country_name, br.organization
from "public"."bus_request" br inner join
     (select top 5 br2.actual_ip, count(*) 
      from "public"."bus_request" br2
      where br2.app_name = 'xxxxx' and
            br2.request_score > 0 and
            br2.date >= '2019-06-07' and
            br2.event_type <> 'browser_js' 
      group by br2.actual_ip
      order by count(*) desc
     ) br2
     on br2.actual_ip = br.actual_ip;