使用带有两个表的select语句

时间:2014-05-05 17:25:25

标签: mysql sql select

我有两张桌子。一个包含用户和公司关系下面的节目

User_company

UserId    CompanyId
  1           2
  2           1
  3           1
  4           2

另一个表包含用户信息

用户

Id    Name    City
1     Peter    LA
2     Harry    SF
3     John     NY
4     Joe      CI

如何发表声明,告诉我公司1中的所有用户?会不会像

Select * from User where Id in (Select UserId from User_company where CompanyId = 1)

工作?

4 个答案:

答案 0 :(得分:0)

  

来自用户的SELECT *

     

在User_company.UserId = User.Id

上左连接User_company

答案 1 :(得分:0)

SELECT U.* FROM User AS U LEFT JOIN 
   User_company AS UC ON U.Id = UC.UserId WHERE UC.CompanyId = 1

答案 2 :(得分:0)

试试这个

Select u.* 
from User u
inner join User_company uc
on u.Id = uc.UserId
and uc.CompanyId = 1
顺便问一下,您发布的查询有什么问题?它也会很好用。只是它是一个子查询,你最好用Join for performance替换它。

Select * from User where Id in 
(Select UserId from User_company where CompanyId = 1)

答案 3 :(得分:0)

这样可行......

SELECT *  works but can be sluggish over time as it may not scale well with more data.
FROM User 
WHERE Id in (Select UserId from User_company where CompanyId = 1)

如果你需要来自两个表的数据,那么这也是最好的。

SELECT * 
FROM User U
INNER JOIN User_Company UC 
  ON U.ID = UC.UserID
WHERE UC.CompanyID = 1

就像这样 - 如果你只需要用户表中的数据,可能是最快的。

Select * from User U
where exists (Select * from User_Company UC where U.ID = UC.UserID and CompanyID = 1)

只有当您需要来自一个表的所有记录且仅需要在另一个表中匹配的记录时,才需要OUTER联接。

至于哪一个最好:它取决于现有的索引和其他要求。以上任何一项都将返回所要求的内容。