MySQL:根据列数选择多个表

时间:2014-11-19 22:08:04

标签: mysql multiple-tables information-schema limesurvey

我有一个包含几种不同类型调查的数据库。每个调查在数据库中都有自己的表。一些调查结构相同。它们具有相同的列数。我想根据表名包含的内容和列数选择调查的子集。

我想要的调查可以有两个不同的名称,它们都包含名称中的数字:

SELECT table_name FROM information_schema.TABLES 
WHERE ((TABLE_NAME like '%ls_survey_%') or (TABLE_NAME like '%ls_old_survey_%')) 
and TABLE_NAME rlike '[0123456789]'

到目前为止一切顺利。我知道我可以在表格中获得列数:

SELECT count(*) FROM information_schema.COLUMNS WHERE table_name = 'tableName'

我很困惑如何将上面的两个表达式组合起来,只获得满足第一个表达式且只有给定列数的表。

1 个答案:

答案 0 :(得分:0)

有可能,您可以查询COLUMNS表,并使用带有HAVING子句的GROUP BY查询:

SELECT `table_name` 
FROM
  `information_schema`.`columns` 
WHERE
  `table_schema`=DATABASE() 
  AND (`table_name` LIKE '%ls_survey_%' OR `table_name` LIKE '%ls_old_survey_%')
  AND `table_name` RLIKE '[0123456789]'
GROUP BY
  `table_name`
HAVING
  COUNT(*)=3 -- number of columns

但是我建议你尝试重新考虑一下你的数据库结构:在你的数据库中有很多类似的表,每个调查一个表通常不是一个好主意。一个想法是存储你的调查:

ID survey | Question   | Answer
--------------------------------
3456      | question1? | ....
3465      | question2? | ....
3456      | question3? | ....
7777      | question1? | ....
7777      | question4? | ....
7777      | question5? | ....