Mysql子查询?

时间:2012-02-20 23:56:05

标签: mysql join subquery

我有一个类似于此

的报告表
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大师可以告诉我最好的方法吗?

2 个答案:

答案 0 :(得分:1)

由于不可能直接在TSQL中为表名提供变量,因此必须动态构造TSQL。

Variable table names in Stored Procedures

答案 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

上面的简要概述非常模糊,因为您现有的表数据尚未真正指定,但一般原则是合理的。将数据迁移到现有结构中甚至不需要花费太多时间,但是当它完成后,它将为您提供更清晰的查询,并允许您实际获得更容易获得的数据