SQL列值作为表名

时间:2015-12-04 10:43:35

标签: mysql sql

我想根据第一个表中的值从多个表中进行选择。 如何使用a.property_type的值作为表名?

SELECT * from properties a
//LEFT JOIN caracteristics_apartments
LEFT JOIN caracteristics_+a.property_type b
ON a.property_id = b.property_id
WHERE a.property_id = 1

所以如果我在属性中有记录:

id_property: 1
property_name: Apartment 3 rooms
property_type: apartment

然后我使用property_type中的值从另一个名为apartment_characteristics的表中选择(由property_type +“_characteristics”组成)以获取属性特征。

2 个答案:

答案 0 :(得分:2)

这种情况通常表明数据库设计没有正确规范化,并且可以通过一些重构将您尝试加入的核心字段组合成一个连贯的表;我认为这是第一个停靠点。

否则 - 同一个查询不可能在不同的表上连接不同的行,它们都必须连接到同一个地方。您可以在运行时构建动态查询以从每个单独的表中进行选择,但在实践中这不是一个好主意;它可能非常脆弱和缓慢。

如果真的必须按照这些方式做某事,那么你需要加入的是对所有可能的别名b表的LEFT JOIN(旁注 - 有意义的namaes让事情变得如此容易调试比a,b,c等)然后使用COALESCE组合它们的值以将它们的列组合成单个形状。但我不会这样做;代码可能是庞大而笨拙的,并且应用程序不会特别清楚哪些数据来自何处。

答案 1 :(得分:-2)

已编辑)这是针对普通联接的,SO,请不要考虑这个答案:

选择a.property_type作为property_type,  b.property_value as property_value 来自Property_table_a a,Property_table_b b 其中a.property_id = b.property_id

对于左外连接或右外连接,使用:

其中a.property_id = b.property_id(+)

这主要是在Oracle数据库中首选。