从两个表中选择不同的

时间:2012-06-14 11:17:54

标签: mysql

鉴于以下表格

      orders
      +----+---------+---------+
      | id | user_id | details |
      +----+---------+---------+  
      | 1  |    2    | blue    | 
      +----+---------+---------+
      | 2  |    1    | red     | 
      +----+---------+---------+
      | 3  |    2    | yellow  | 
      +----+---------+---------+
      | 4  |    2    | cyan    | 
      +----+---------+---------+

      users
      +---------+---------+---------+
      | user_id |    ph   |   name  | 
      +---------+---------+---------+
      |   1     |   123   |   fred  | 
      +---------+---------+---------+
      |   2     |   456   |   Stan  | 
      +---------+---------+---------+
      |   3     |   189   |   Levi  | 
      +---------+---------+---------+

我知道如何使用distinct

在第一个表中仅选择每个用户的一次出现
     SELECT DISTINCT user_id FROM orders

我怎样才能从用户那里提取电话号码?

我可能会选择一个循环并挑选出每个数字......

     SELECT ph from users WHERE user_id = user_id

不禁想到我可以使用一个单行查询。

结果将是

     123
     456

2 个答案:

答案 0 :(得分:2)

从Orders表中特别选择可能是一项繁重的操作。取决于该桌子的大小。

也许这会更快:

Select u.ph 
  from users u 
  where exists (select id from orders where user_id = u.user_id);

答案 1 :(得分:0)

相关子查询将比使用JOIN完成得慢得多,SELECT a.ph FROM users a INNER JOIN orders b ON a.user_id = b.user_id GROUP BY a.user_id, a.ph 如果已定义索引,则可以加入索引:

{{1}}