选择从查询中动态获取的表名称

时间:2015-06-30 14:51:48

标签: mysql sql subquery

我有3张桌子

广告系列1(表格)

id    campaign_details 
1     'some detail'

广告系列2(表格)

id    campaign_details
 1    'some other detail'

campaign_list(TABLE)

id   campaign_table_name
1    'campaign1'
2    'campaign2' 

Campaign列表包含上述两个表的表名。我想从Campaign List表中选择并使用我从此select中获得的表名获取记录计数 例如。

使用select i get campaign1(表名)。然后我在campaign1上运行select查询来计算记录数。

我现在正在做的是。 - 从campign_list中选择 -loop遍历所有campaign_table_names并单独运行select query

有没有办法使用单个查询执行此操作 像这样的东西

select campaign_name,(SELECT COUNT(*) FROM c.campaign_name) as campcount from campaign_list c 

SQLFiddle:http://sqlfiddle.com/#!9/b766d/2

3 个答案:

答案 0 :(得分:0)

在单个查询中无法动态构建它,但可能会作弊。特别是如果只有两个链表。

我列出了两个选项

左外连接两个表

select campaign_name,
       coalesce(c1.campaign_details, c2.campaign_details)
  from campaign_list c
  left join campaign1 c1 using (id)
  left join campaign2 c2 using (id);

联合所有两个不同的选择

select campaign_name, 
       campaign_details
  from campaign_list c
  join campaign1 c1 using (id)
union all 
select campaign_name,
       campaign_details
  from campaign_list c
  join campaign2 c2 using (id);

sqlfiddle

答案 1 :(得分:0)

将广告系列表格合并到1个表格中,然后添加一个名为' type'的列。 (INT)。

campaign_items表:

campaign_id   campaign_name
1             'campaign1'
2             'campaign2' 

campaign_lists表

SELECT campaign_name, (SELECT COUNT(*) FROM campaign_items WHERE item_type = campaign_id) as campaign_count
FROM campaign_lists

然后您可以使用以下select语句:

{{1}}

答案 2 :(得分:0)

哎呀,写作花了我很长时间才得到了Colin Raaijmakers的答案。好吧,无论如何我都会发布我的答案,尽管答案大致相同。也许我的精心设计可以帮助你解决问题。

您的问题源于糟糕的数据库设计。数据库用于对数据及其关系进行排序。 CD数据库包含专辑,歌曲,艺术家等。商业数据库可以包含物品,仓库,销售等。您的数据库包含表名。 [...思考时间:-)]

(编写DBMS时,您希望存储表名,列名,约束等,但我想我是正确的,假设您没有编写新的DBMS。)

因此,创建处理实际数据的表。 E.g:

  • campain_type(id_campain_type,description,...)
  • campain(id_campain,id_campain_type,campain_date,...)

<强> campain_type

id_campain_type  description
1                Type A
2                Type B
3                Type C

<强> campain

id_campain  id_campain_type  date
33          1                2015-06-03
85          2                2015-10-23
97          2                2015-12-01

<强>查询

public static void main(String[] args) {
    RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();

    Map<String, String> systemProperties = runtimeBean.getSystemProperties();
    Set<String> keys = systemProperties.keySet();

    System.out.println("HAY: " + systemProperties.get("LOCALE_USER_DEFAULT"));
    System.out.println("HAY: " + systemProperties.get("LOCALE_SDECIMAL"));

    for (String key : keys) {
        String value = systemProperties.get(key);
        System.out.printf("[%s] = %s.\n", key, value);
    }

}

<强>结果

description  cnt
Type A       1
Type B       2
Type C       0