时间戳转换器

Mysql根据一个值与多个表进行内连接

日期:2023-05-09     浏览:93    
【中文标题】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管理和查询数据:连接查询基础

{...一起的最普遍的方法,通过连接查询可将多个表作为一个表进行处理。连接查询分为内连接和}

mysql管理和查询数据:连接查询基础

{...一起的最普遍的方法,通过连接查询可将多个表作为一个表进行处理。连接查询分为内连接和}

面试被问到mysql外连接内连接与自连接的区别,怎么回答?

{...有记录一一匹配。内连接则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。外连接其结果集中不仅包含符合连接条件的行,而且...}

mysql连接查询(代码片段)

{...一起的最普遍的方法,通过连接查询可将多个表作为一个表进行处理。 连接查询分为内连接和外连接。 交叉连接(CrossJoin),又称“笛卡尔连接(CartesianJoin)”或“叉乘(Product&#x}

easyclick之mysql连接查询(代码片段)

{...EasyClick之MySQL连接查询什么是连接查询连接查询可以实现多个表的查询,当查询的字段数据来自不同的表就可以使用连接查询来完成。连接查询可以分为:内连接查询左连接查询右连接查询自连接查询内连接查询查询两个表中...}

mysql进阶—联合查询(外连接内连接子连接合并查询)(代码片段)

{...接子查询合并查询联合查询:对两张及两张以上的表进行查询,就叫联合查询。联合查询的原因:所要获得的数据来自于多张表,联合查询才能得到。首先在数据库中我们创建四张表:班级表、学生表、课程...}

将游标适配器与多个表游标一起使用(内连接)

{】将游标适配器与多个表游标一起使用(内连接)【英文标题】:UsingCursorAdapterwithmultipletablecursor(innerjoin)【发布时间】:2014-12-3005:46:04【问题描述】:我需要两个表来进行搜索。我使用内部连接来获得这两个。但是这两个不同...}

多个表的多个内连接

{...1-0106:44:17【问题描述】:所以我有四张桌子。每个表都有一个用于前一个表id的id。所以我的点击表有一个id和一个它来自的广告的id。在广告表中,它有一个广告ID和一个广告活动ID。所以这里有一个例子。Table4-idcompanytable_id11hp20...}

mysql_连表查询(代码片段)

{...表查询通常分为内连接和外连接。内连接就是使用INNERJOIN进行连表查询;而外连接又分为三种连接方式,分别是左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全连接(FULLJOIN)。下来我们一起来看一下这几种连接方式的区别及基础用...}

MySQL内连接获取连接表的最后一项

{】MySQL内连接获取连接表的最后一项【英文标题】:MySQLInnerJoinGetLastItemofJoinedTable【发布时间】:2020-07-2608:30:52【问题描述】:有两个表:表名:ticket+-------+---------+---------+-------------------+|id|title|closed|param|+-------+--------------+--------...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号