2012-01-17 53 views
1

我正在编写一个连接到远程服务器上的MySQl数据库的桌面应用程序。 我在MySQL数据库中有两个表。从一个表读取字段并使用该字段信息查询并从另一个字段获取信息需要很长的时间

称为客户端的一个表包含联系人ID和其他基本联系信息。

另一个表称为Property,包含属性类型和地址信息,并且还具有与Client表中的Id字段相同的Client_Id字段。

当前我打开到数据库的连接。

然后,我使用Select查询从属性表中为字段名为PropertyType ='House'的所有属性获取List。

然后,我采用该列表并通过它使用另一个SELECT查询进行枚举,每个客户端根据他们的Id获取列表中的Id。

然后关闭连接。 所以我只打开和关闭连接一次。

这需要很长的时间只有400条记录,我只是在学习mySQL,并且肯定有更好的方法。任何人都可以提供任何建议,我将如何查询一个表,以获得符合特定条件的所有字段,然后使用字段(Client_Id)搜索另一个表以获取基于与Client_Id匹配的Id的客户端?

+0

你可以发表你的表'schema'? – 2012-01-17 14:12:41

+0

你看过在SQL中使用子查询吗? http://dev.mysql.com/doc/refman/5.0/en/subqueries.html – Lloyd 2012-01-17 14:18:28

回答

2

根据你想看到的数据,你可以试试:

select p.address, c.name, c.phone 
from Property p 
join Clients c on p.client_id = c.id 
where p.PropertyType = 'House' 
+1

这种做法诡计! 这是我在看到这个答案之前,通过做一点研究而最终使用的。但是,这回答了我的整体路径! “SELECT * FROM Client INNER JOIN Property ON Client.Id = Property.Lead_Id WHERE Property.PropertyType ='House'” – GregH 2012-01-17 15:24:37

2

可以减少到一个查询的东西,如

SELECT * FROM Client WHERE Client_id IN (SELECT Client_id FROM Property WHERE PropertyType='House'); 

此外确保,你把所有的指标到位。

+0

当我运行,我得到一个错误'IN/ALL/ANY subquery'中的未知列'Client_Id' 我确信我在属性表中有该列 – GregH 2012-01-17 15:14:00

+0

自己测试子查询:SELECT Client_id FROM属性WHERE PropertyType ='House' – 2012-01-17 15:21:51

相关问题