我有一个类似于此
的报告表reports
inspection_type | inspection_number
berries | 111
citrus | 222
grapes | 333
在我的情况下, inspection_type
是我想要的另一个表的名称
从SELECT *
等于inspection_number
的{{1}}开始
那个关联的表。
report_key
问题是我不知道如何查询inspection_type来获取表名 查询值。这有什么意义吗?
我在这里试过这个,但即使我知道这是错误的:
{fruit}
row | report_key | etc....
value | 111 | value
value | 222 | value
SQL大师可以告诉我最好的方法吗?
答案 0 :(得分:1)
由于不可能直接在TSQL中为表名提供变量,因此必须动态构造TSQL。
答案 1 :(得分:1)
你无法真正完成你在SQL中的目标,你需要用另一种语言来解决,或者(这是首选的解决方案)重构数据库即(对不起元代码) )
// Comes in where your existing `reports` table is
inspections (
inspection_id INT UNSIGNED NOT NULL AI,
inspection_type_id INT UNSIGNED NOT NULL (links to inspection_types.inspection_type_id)
.... other rows ....
)
// New table to normalise the inspection types
inspection_types (
inspection_type_id INT UNSIGNED NOT NULL AI,
type_name VARCHAR NOT NULL
.... other rows ....
)
// Normalised table to replace each {fruit} table
inspection_data (
inspection_data_id INT UNSIGNED NOT NULL AI,
inspection_id INT UNSIGNED NOT NULL (links to inspections.inspection_id)
.... other rows ....
)
然后你的查询就是
SELECT *
FROM inspections
INNER JOIN inspection_types
ON inspection_types.inspection_type_id = inspections.inspection_type_id
INNER JOIN inspection_data
ON inspection_data.inspection_id = inspections.inspection_id
上面的简要概述非常模糊,因为您现有的表数据尚未真正指定,但一般原则是合理的。将数据迁移到现有结构中甚至不需要花费太多时间,但是当它完成后,它将为您提供更清晰的查询,并允许您实际获得更容易获得的数据