鉴于以下表格
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
答案 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}}