SQL:从一个表中提取id以从另一个表中获取名称

时间:2018-01-18 23:56:20

标签: sql

假设我有两张桌子。一个有头发颜色和用户ID。

TABLE A:

USER_ID   HAIR_COLOR
1         black
2         black
2         black
3         blonde
...

另一个有USER_ID和NAME:

TABLE B: 

USER_ID    NAME
1          John
2          Jane
3          Sally

我希望在一个命令中获得所有拥有金发的用户的列表。问题是,我也只想要在表A中重复的用户。

我是SQL的新手,但我相信你可以获得所有带有金发女郎的用户的所有user_id:

SELECT
    user_id
FROM
    A
GROUP BY
    user_id, hair_color
HAVING 
    COUNT(*) > 1

但是我迷失了如何通过表B将user_id列表转换为实际名称。想法?

(这是一个微不足道的MWE,我意识到有更好的格式化数据库的方法。)

2 个答案:

答案 0 :(得分:1)

看起来您可以使用子查询轻松扩展查询:

SELECT
    user_id, (SELECT name FROM B WHERE B.user_id = A.user_id)
FROM
    A
GROUP BY
    user_id, hair_color
HAVING 
    COUNT(*) > 1

答案 1 :(得分:1)

试试这个(扩展您的查询):

SELECT B.user_id, B.name
FROM B
WHERE B.user_id IN 
    ( SELECT
          user_id
      FROM
         A
      GROUP BY
          user_id, hair_color
      HAVING 
          COUNT(*) > 1
    )