mysql请求检索数据与2个表相结合

时间:2016-10-21 11:21:16

标签: mysql sql select

我有三张桌子

enter image description here

我想请求所有人,例如companyTypeID是' 2'。我怎么查询?

4 个答案:

答案 0 :(得分:0)

您可以使用in运算符:

SELECT *
FROM   persons
WHERE  CompanyId IN (SELECT CompanyId
                     FROM   company
                     WHERE  CompanyTypeId = 2)

答案 1 :(得分:0)

做一个INNER JOIN(左边或右边的连接在功能上是相似的,唯一的区别在于等式的哪一边被尊重)。嵌套查询/子查询是extremely expensive if they become dependent in nature - 即使这不是您的情况 - 我不建议将它们用于大型表。

SELECT t1.*
FROM Persons AS t1
LEFT JOIN Company AS t2 ON
    t2.companyTypeID = t1.CompanyID

要确保使用索引进行加入,您应该在每个表的companyTypeIDCompanyID列上创建索引。将EXPLAIN EXTENDED添加到上面的查询中以验证索引确实正在使用。

答案 2 :(得分:0)

执行SQL连接:

联接比子查询更快,在另一篇文章中:

SELECT Persons.firstname AS first name
  FROM Persons
  JOIN Company ON company.ID == Persons.CompanyID
 WHERE Company.companyTypeID == 2

虽然您需要选择所需的所有字段,但使用别名来简化名称

答案 3 :(得分:0)

您需要使用SQL语句JOIN。这都是关于数学集的!

关于数学集方法下的JOIN声明的图形(和表面)解释:

https://www.google.com.br/imgres?imgurl=http%3A%2F%2Fi.imgur.com%2FhhRDO4d.png&imgrefurl=https%3A%2F%2Fwww.reddit.com%2Fr%2Fprogramming%2Fcomments%2F1xlqeu%2Fsql_joins_explained_xpost_rsql%2F&docid=q4Ank7XVw8j7DM&tbnid=f-L_7a3HkxW_3M%3A&w=1000&h=740&client=ubuntu&bih=878&biw=1745&ved=0ahUKEwj2oaer5evPAhUBFZAKHe4nAdAQMwgdKAEwAQ&iact=mrc&uact=8#h=740&w=1000

您的问题的SQL(如果我有这个):

SELECT * FROM Persons p LEFT JOIN Company c ON c.ID = p.companyID
                        LEFT JOIN CompanyType ct ON ct.ID = c.companyTypeID
WHERE c.id = 2;

为什么'LEFT JOIN'?查看上面关于设置方法说明的链接!

第二个'LEFT JOIN'只是为了带来companyType表的描述。

声明中的“*”是真实的!为了提高性能,不得在生产中使用它。因此,您必须将'*'替换为您需要的所有字段。例如,“CONCAT(p.firstname,CONCAT(”“,p.lastname))作为PersonName,c.name CompanyName,...”或类似的东西。我想你正在使用MySQL

希望我帮助过!