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  | 
      +---------+---------+---------+

個別のを使用して、最初のテーブルで各ユーザーのオカレンスを1つだけ選択する方法を知っています

     SELECT DISTINCT user_id FROM orders

ユーザーから電話番号だけを取得するにはどうすればよいですか?

私はおそらくループに行き、次のように各番号を選ぶことができます...

     SELECT ph from users WHERE user_id = user_id

私が使用できるワンライナークエリがあるかもしれないと考えずにはいられません。

結果は

     123
     456
4

2 に答える 2

2

Ordersテーブルから個別に選択するのは、大変な操作になる可能性があります。そのテーブルがどれだけ大きくなるかによって異なります。

多分これはより速くなるでしょう:

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 に答える