Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何创建一个接受用户Id并返回用户’;s的全名和职业以及1个电子邮件地址_Mysql_Sql_Stored Procedures - Fatal编程技术网

Mysql 如何创建一个接受用户Id并返回用户’;s的全名和职业以及1个电子邮件地址

Mysql 如何创建一个接受用户Id并返回用户’;s的全名和职业以及1个电子邮件地址,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我在尝试调用/选择过程时出现此错误 where子句中的“userid”列不明确 在MySQL中编写代码时,有三条规则: 在查询中始终限定列名 始终通过命名约定来区分参数名称 始终通过命名约定来区分局部变量 因此,我将更像这样编写代码: delimiter $$ create procedure userInformation(in uID varchar(50), out fullname varchar(50), out job varchar(50), out email varcha

我在尝试调用/选择过程时出现此错误

where子句中的“userid”列不明确


在MySQL中编写代码时,有三条规则:

  • 在查询中始终限定列名
  • 始终通过命名约定来区分参数名称
  • 始终通过命名约定来区分局部变量
因此,我将更像这样编写代码:

delimiter $$

create procedure userInformation(in uID varchar(50), out fullname varchar(50), out job varchar(50), out email varchar(50))
begin
      select concat(firstname, ' ', lastname) into FULLNAME
      from users
      where userid = uID;

      select occupation into JOB
      from occupation
      join users on users.occupationID = occupation.occupationid
      where userid = uID;

      select useremail into EMAIL from useremail
      join users on useremail.userid = users.userid
      where userid = uID
      limit 1;

END$$

delimiter ;
call userInformation('00002380-3e3b-11e3-bbac-c42c03098f6c', @fullnam, @job, @email);
select @fullname, @job, @email;

感谢您将其正确格式化,我们正试图找出在何处编辑它@Gordon Linoff如果有一个
userid
列放入多个表中,请使用表名来解决它,这是第三个选择歧义在这里,
在useremail上加入用户。userid=users.userid where userid=uID
。和你的问题无关,但是,如果buddy有多个电子邮件帐户,你就是在随机抽取一个。这可能不是一个好主意。这几乎奏效了,必须将“where o.userid=in_uID”更改为“where子句”中的where o.occuptiondunnown列“o.userid”是我输入此代码时得到的,如果在作业中更改iget null,则职业表没有用户ID(有职业ID);users表有usersid,useremail表也有usersid。将o.userid更改为u.userid,效果很好,非常感谢!我现在终于理解了材料!!
create procedure userInformation (
    in in_uID varchar(50),
    out out_fullname varchar(50),
    out out_job varchar(50),
    out out_email varchar(50)
   )
begin
      select concat(u.firstname, ' ', u.lastname)
      into out_fullname
      from users u
      where u.userid = in_uID;

      select o.occupation
      into out_job
      from occupation o join
           users u 
           on u.occupationID = o.occupationid
      where u.userid = in_uID;

      select ue.useremail
      into out_email
      from useremail ue JOIN
           users u
           on ue.userid = u.userid
      where ue.userid = in_uID
      limit 1;
end$$