在MySQL中连接表并仅请求第二个表的数据

5

我想要连接两个表格,只需要显示第二个表格中选定的三列数据,并将其中一列作为比较条件。

例如:

第一个表格名字叫做员工(employee):它有一个用户名为user_id的列以及其他一些列。

第二个表格名字叫做人员(people):它有一个用户名为user_id的列,其中包括一些员工的user_ids。

我要选择的列都来自人员表格! (firstname, lastname, email)

我尝试了以下方法,但出现了问题:

SELECT userid, firstname, lastname, email 
FROM people 
JOIN employee 
WHERE people.userid = employee.userid;

我不确定我做错了什么,请你帮助我纠正一下吧?

4个回答

5
您可以尝试这个查询:
SELECT 
     p.userid, 
     p.firstname, 
     p.lastname, 
     p.email 
FROM 
     people as p, 
     employee as emp 
WHERE 
     p.userid = emp.userid

这感觉像是退步 :-( - Strawberry
你为什么认为这是一步退缩的草莓?对我来说它似乎运行良好。 - Sam Edward
我认为这是因为它完全回到了旧的连接语法,而不是使用JOIN ... ON ...。 - Turo

2

看起来你的脚本中,至少在userid列上会遇到歧义性。如果两个表之间存在同名列,你需要在WHERE子句中明确告诉SQL该列来自哪个表。

SELECT
  userid, -- AMBIGUOUS 
  firstname,
  lastname, 
  email 
  FROM people
    JOIN employee 
  WHERE people.userid = employee.userid;

示例解决方案:
SELECT
  people.userid,
  people.firstname,
  people.lastname,
  people.email
  FROM people
    JOIN employee 
  WHERE people.userid = employee.userid;

2

针对此问题,您可以使用以下查询

假设我有一个用户表,其中一个用户有零到一个个人资料图片

我需要获取没有个人资料图片的用户(名字、姓氏、出生日期),我可以使用以下查询

select * 
from user c
where  NOT EXISTS (
    select 1 
    from photo p
    where p.id = c.photo_id
)

在这里,您可以在这两个表之间使用任何字段。
去掉 "not" 将导致仅显示拥有个人资料图片的用户。
希望这能帮助您。
您可以搜索“SEMI JOIN”和“ANTI JOIN”以获取更多信息。

在这种情况下,“用户”是您需要显示的所需表。 - Mohammed Housseyn Taleb

0

我认为这个查询会解决你的问题

insert into table1 (clmn_1,clmn_2,clmn_3) SELECT clmn_1,clmn_2,clmn_3 FROM table2 where id = value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接