1

鉴于下表

      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
4

2 回答 2

2

从 Orders 表中选择 Distinctively 可能是一项繁重的操作。取决于该表将变得有多大。

也许这个会更快:

Select u.ph 
  from users u 
  where exists (select id from orders where user_id = u.user_id);
于 2012-06-14T11:29:58.077 回答
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
于 2012-06-14T11:32:29.963 回答