Mysql根据一个值与多个表进行内连接
Posted
技术标签:
【中文标题】Mysql根据一个值与多个表进行内连接【英文标题】:Mysql inner join with multiple tables according to a value 【发布时间】:2017-11-16 15:55:08 【问题描述】:我必须创建一个待售的真实状态数据库。问题是房产的种类:如果我有房子,我有一种描述,但如果只是一块土地,描述不需要包括浴室的数量,只需包括面积、前面的范围等。
所以我做了一个表格,其中包含有关元素 (imoveis) 的通用数据以及地址、价格等。然后我创建了元素类别 (imoveis_categs)。我做了5个类别,每个类别都会有一个表格(例如:imoveis_descr2),其中包含该种类的具体特征。
要输入数据很容易,但要列出我的数据,我需要执行查询选择以根据某些过滤器查找这些元素。在 php 中很容易解决,但我想知道大量数据和用户请求的性能。最好通过 SQL 命令来解决它,我想。但是mysql不是我的领域,我想像这样开始......
SELECT * FROM imoveis INNER JOIN imoveis_descr(imoveis.categ) ...
imoveis 的“categ”字段指向正确的描述表。有可能做这样的事情吗?还有其他更合适或更有效的方法吗?
编辑:我试图用一个例子来澄清...... EDIT2:我更正了示例,“房间”列将是相同的。这些字段不是唯一的,公寓和房屋类别都有房间数。
Table imoveis
id categ title price address ...
1 2 The House $ 1000000 Somestreet 77
2 1 An Appartment $ 500000 Somewhere 11
3 4 A Land $ 250000 Nowhere 33
Table imoveis_descr1
idImovel rooms area floor ...
2 2 70 5
Table imoveis_descr2
idImovel rooms fieldArea constrArea ...
1 3 120 80
Table imoveis_descr4
idImovel area width height ...
3 2640 22 120
Result
id categ title price address rooms fieldArea constrArea area floor area width height
1 2 The House $ 1000000 Somestreet 77 3 120 80 null null null null null
2 1 An Appartment $ 500000 Somewhere 11 2 null null 70 5 null null null
3 4 A Land $ 250000 Nowhere 33 null null null null null 2640 22 120
【问题讨论】:
更新您的问题,添加适当的数据样本和预期结果。 我会试试的,不过是不规则的大表格,不容易放到文字区... 【参考方案1】:您的某些字段名称在您的结果中重复(例如“房间”),将这些字段与 COALESCE 合并不是更好吗(因为它们看起来是互斥的)?
由于您引用的表格是互斥的,您将永远无法使用INNER JOIN
获得所需的结果,您需要OUTER JOIN
:
SELECT
i.id,
i.categ,
i.title,
i.price,
i.address,
COALESCE(i1.rooms, i2.rooms) AS rooms,
i2.fieldArea,
i2.constrArea
COALESCE(i1.area, i3.area, ...) AS area,
...
FROM imoveis AS i
LEFT OUTER JOIN imoveis_descr1 AS i1 ON i1.idImovel = i.id
LEFT OUTER JOIN imoveis_descr2 AS i2 ON i2.idImovel = i.id
LEFT OUTER JOIN imoveis_descr3 AS i3 ON i3.idImovel = i.id
...
【讨论】:
房间重复字段没有问题,公寓或房屋的含义相同。我现在可以看到我在示例中做错了。但你确实让我明白了这个问题,为所有描述表进行 INNER JOIN 而不是“构建”正确的名称......以上是关于Mysql根据一个值与多个表进行内连接的主要内容,如果未能解决你的问题,请参考以下文章