MySQL从查询中设置变量并在另一个查询中使用它

时间:2016-03-27 01:34:49

标签: mysql sql variables sql-insert

我无法让下面的代码工作。我试图从查询中设置变量并在另一个中使用它两次。如果我将第一个查询复制到变量的位置,则查询运行正常。由于第一个查询将始终返回相同的结果,我宁愿不再运行两次。

public class User
{
    public int UserID { get; set; }

    public bool IsAdministrator { get; set; }
    [StringLength(50, MinimumLength = 1)]
    public string LastName { get; set; }
    [StringLength(50, MinimumLength = 1, ErrorMessage = "First name cannot be longer than 50 characters.")]

    [Column("FirstName")]
    public string FirstMidName { get; set; }

    public string FullName
    {
        get { return FirstMidName +" "+ LastName; }
    }
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime EnrollmentDate { get; set; }

    public int DepartmentID { get; set; }
    [ForeignKey("DepartmentID")]
    public virtual Department Department { get; set; }
    public int DepotID { get; set; }
    [ForeignKey("DepotID")]
    public virtual Depot Depot { get; set; }
    public virtual ICollection<Ticket> Tickets { get; set; }


}

user_id和target_user_id也是主键。

2 个答案:

答案 0 :(得分:1)

这是SQL Server中的有效语法,只要sub-query返回一行。

 SET @sid = (SELECT status_id
                    FROM user_relationship_status
                    WHERE status = 'LIKE');

Mysql你需要这样做

SELECT @sid:= status_id 
  FROM user_relationship_status
 WHERE status = 'LIKE'

插入查询应该像

我无法让下面的代码工作。我正在尝试从查询中设置变量并在另一个中使用它两次。如果我将第一个查询复制到变量的位置,则查询运行正常。由于第一个查询将始终返回相同的结果,我宁愿不再运行两次。

    SET @sid = (SELECT status_id
                FROM user_relationship_status
                WHERE status = 'LIKE');

    INSERT INTO user_relationships (user_id, target_user_id, status_id)
    VALUES (
      17,
      22,
      @sid
    )
    ON DUPLICATE KEY UPDATE
      status_id = @sid

答案 1 :(得分:0)

使用以下脚本设置@sid

SELECT status_id INTO @sid FROM user_relationship_status WHERE status =&#39; LIKE&#39;限制1;