【发布时间】:2021-03-12 14:34:33
【问题描述】:
我正在努力寻找可能在不同表中的值,但使用 UNION 很痛苦,因为有很多表。
[Different table that contains the suffixes from the TestTable_]
| ID | Name|
| -------- | -----------|
| 1 | TestTable1 |
| 2 | TestTable2 |
| 3 | TestTable3 |
| 4 | TestTable4 |
TestTable1 content:
| id | Name | q1 | a1 |
| -------- | ---------------------------------------- |
| 1 | goose | withFeather? |featherID |
| 2 | rooster| withoutFeather?|shinyfeatherID |
| 3 | rooster| age | 20 |
TestTable2 content:
| id | Name | q1 | a1 |
| -------- | ---------------------------------------------------|
| 1 | brazilian_goose | withFeather? |featherID |
| 2 | annoying_rooster | withoutFeather?|shinyfeatherID |
| 3 | annoying_rooster | no_legs? |dead |
TestTable3 content:
| id | Name | q1 | a1 |
| -------- | ---------------------------------------- |
| 1 | goose | withFeather? |featherID |
| 2 | rooster| withoutFeather?|shinyfeatherID |
| 3 | rooster| age | 15 |
常用列:q1 和 a1
有没有办法在不使用 UNION 的情况下解析所有这些以查找特定值,因为其中一些可能有不同的列?
类似于:检查所有这些表中是否存在“q1='age'”(从 1 到 50) 选择 q1,* 来自(某事) 其中 q1 存在于 (TestTable_*)... 或类似的地方。
如果不可能,也不是问题。
【问题讨论】:
-
您能否澄清您要回答的问题,例如:“在哪个表中,列 q1 等于 42?”或“在哪个表中 q1 等于 a1?”我不清楚您所说的“可能在不同表中的值”到底是什么意思。
-
如果您希望一个数据集中的所有数据易于访问,请不要将它们存储在不同的表中。如果您有多个表并希望它们在一个数据集中,您需要到
JOIN或UNION (ALL)它们。没有SELECT {Columns} FROM dbo.[Test_Table_*]语法。似乎问题出在您的设计上。 -
如果你有一个糟糕的数据模型——比如跨表拆分实体——那么你就不得不忍受使用
union的“痛苦”。修复数据模型,让你只有一张表。 -
听起来您的设计不符合要求。您可能需要考虑一项任务,即查询每个表并在主索引类型表中创建可搜索结果,或者动态 Sql 可能是一种解决方案,如果没有具体示例就很难说。
-
更新了一点。不幸的是,无法改变牌桌上的任何东西。
标签: sql sql-server ssms