【问题标题】:Search multiple tables same column name搜索多个表相同的列名
【发布时间】:2018-03-26 21:15:11
【问题描述】:

我有一个包含一百多个表的数据库,其中包含来自多个站点的天气记录,每个表都是不相关的,但都有几个具有相同数据集的共享列名(例如,每天的最高温度)。我无法加入这些表,因为每个表中只有几个列名是一致的(这些是我想要使用的)。

我希望能够在所有表中搜索模式和值(例如,SELECT stationName, date FROM multipleTables where maxTemp > 30),这应该在满足条件的每个表中返回站点名称和日期。

每个表的结构大致如下:

站名 |日期|最高温度 |最低温度 |等等

我是使用 SQL 和数据库的新手,所以我真的不知道该怎么做。我已经尝试将数据合并到一个表中,但它很快就变得混乱了。我也尝试过使用 union 和 joins 但没有成功。

我将 mariaDB 与 phpmyadmin 一起使用,我的原始数据在 csv 文件中

【问题讨论】:

  • 可能是时候建议将其投入 Hadoop 并让 NoSQL 大放异彩了。一张桌子要好得多,但是您可以通过视图和一堆废话来模仿它。好奇是否有更清洁的解决方案,但我的经验表明,您需要进行大量手动工作映射,例如每次一个表之间的列并将其合并。(不要加入,使用联合。选择“table1”作为tablename, columns_desired from table 1 union select 'table2' as tablename, columns_desired .... 等等。我喜欢留下 'tablename' 列来帮助确定该记录来自哪个表)
  • @Twelfth "union 而不是 join" 可能足以得到一个可靠的答案。
  • “我也尝试过使用 union ...” - 请使用 UNION 发布您的尝试。
  • 只需一个一个地做,然后用你的结果建立一个新表。
  • 谢谢,我会看看 Hadoop 和 NoSQL,我对 Firebase 有一点经验,但对 NoSQL 不太了解。我遇到的联合问题是每个表都有不同数量的列,有些表的数据我希望可以查询,而其他表没有,所以它变得非常混乱和混乱,认为它仍然可能我的选择虽然它只是非常乏味和耗时。

标签: sql database mariadb


【解决方案1】:

以下 SQL 会针对所有具有匹配列的表生成实际查询,然后这些查询可以作为 SQL 脚本按顺序运行 并且可以收集结果 -

SELECT 
    'SELECT '||U1.COLUMN_NAME||', '||U2.COLUMN_NAME||' FROM '||U1.TABLE_NAME||' WHERE MAXTEMP > 30' 
FROM 
    USER_TAB_COLUMNS U1, USER_TAB_COLUMNS U2
WHERE U1.TABLE_NAME = U2.TABLE_NAME
AND U1.COLUMN_NAME = 'StationName '
AND U2.COLUMN_NAME = 'Date'
;

【讨论】:

  • 这不是 MariaDB 语法。见information_schema.COLUMNS.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多