答案 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
要确保使用索引进行加入,您应该在每个表的companyTypeID
和CompanyID
列上创建索引。将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声明的图形(和表面)解释:
您的问题的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
希望我帮助过!