mysql使用某种内部连接在两个表上搜索
表estate_common->房产的通用数据,如产权名称等。房产可能不同 例如1类-公寓2类-住宅等mysql使用某种内部连接在两个表上搜索,mysql,Mysql,表estate_common->房产的通用数据,如产权名称等。房产可能不同 例如1类-公寓2类-住宅等 id | kind | title | name 596 | 1 | title 596 | name 596 597 | 1 | title 597 | some 597 598 | 1 | title 598 | some 598 599 | 1 | title 599 | some 599 600 | 1 | title 600 | some 60
id | kind | title | name
596 | 1 | title 596 | name 596
597 | 1 | title 597 | some 597
598 | 1 | title 598 | some 598
599 | 1 | title 599 | some 599
600 | 1 | title 600 | some 600
601 | 5 | title 607 | some 601
表estate\u kind\u 1->不同种类的特定数据每个estate\u kind\u有不同的结构列等
id | estate_common_id | floor | flat | shell
1 | 596 | 250 | 9b | pvc
2 | 597 | 156 | 10c | abc
3 | 598 | 126 | 12a | csd
4 | 599 | 226 | 2a | add
5 | 600 | 198 | 15o | fdd
来自estate_common的id等于estate_common_来自estate_kind的id,其中R是表estate_common中的种类数
在准备查询之前,我知道我必须组合来自表estate\u common和estate\u kind\u 1的数据
使用两个表中的数据获取简单的房地产细节很容易
SELECT `common`.*, `kind`.* FROM `estate_common` AS `common` INNER JOIN `estate_kind_1` AS `kind` ON common.id = kind.estate_common_id WHERE (common.id = '597')
但现在我开始做一些xml导出,需要在选择estate_common id时从表means estate_common和estate_kind_1中选择数据
那么像这样提问吧
SELECT `common`.*, `kind`.* FROM `estate_common` AS `common`, `estate_kind_1` AS `kind` WHERE (common.id IN ('596,597'))
但它给了我奇怪的结果
id | kind | title | name | id | estate_common_id | floor | flat | shell
596 | 1 | title 596 | name 596 | 1 | 596 | 250 | 9b | pvc
596 | 1 | title 596 | name 596 | 2 | 597 | 156 | 10c | abc
表estate_kind_1中的数据表示右侧id为1 a 2的数据正常,但estate_common左侧的数据用于两行的数据相同
应该是
id | kind | title | name | id | estate_common_id | floor | flat | shell
596 | 1 | title 596 | name 596 | 1 | 596 | 250 | 9b | pvc
597 | 1 | title 597 | name 597 | 2 | 597 | 156 | 10c | abc
我试着按不同的方式分组,但可能是错误的
我很高兴能得到任何帮助
谢谢您的后一个查询没有显式连接,因此正在进行内部连接。因为也没有ON子句,所以发生的是一个完全的叉积,限制在一个表上。您应该得到的结果是,对于每一种类型的行,您将得到两个结果-一个用于596个公共行,另一个用于597个公共行 我假设您已将结果裁剪为两行 您需要的查询是:
SELECT `common`.*, `kind`.*
FROM `estate_common` AS `common`, `estate_kind_1` AS `kind`
ON common.id = kind.estate_common_id
WHERE (common.id IN ('596,597'));
关于你的问题,我一定遗漏了什么。这是你想要的吗
SELECT `common`.*, `kind`.*
FROM `estate_common` AS `common`
INNER JOIN `estate_kind_1` AS `kind` ON common.id = kind.estate_common_id
WHERE common.id IN ('596,597')
解决方案非常简单
SELECT common.*, kind.* FROM estate_common common, estate_kind_1 kind WHERE common.id = kind.estate_common_id AND (common.id IN (596,597))
选择common.*,kind.*从estate_common作为common内部连接estate_kind_5作为common.id上的kind=kind.estate_common_id,其中common.id在“596597”中可以看到,我问题的最后一个blokc只给出了一行,common.id 596是mi的第一个想法。我需要从查询中的两个表中选择596和597数据应该是estate\u kind\u 1,而不是estate\u kind\u 5,正如我刚才发布的,我只是在本地主机上有不同的表