将列表插入Mysql中的单个列

时间:2016-01-30 21:21:43

标签: mysql

我有类似的东西:

  • Course:CID - CName
  • Discipline:MID - MNamev - MProf

我必须创建一个学科列表,因为一门课程将有多个。所以我按照这个link创建了第三个表,就像那样:

CREATE TABLE coursedisciplines (
courseID int references curso (CID),
disciplineID int references materias (MID),
constraint pkcoursedis primary key (courseID, disciplineID)
)

我可以为第一个表(课程)和第二个(学科)添加数据。遗憾的是,当尝试使用第三个连接它们时,我收到有关语法的错误。我找了文档,但没有找到我正在寻找的东西。这是代码的一部分。

id = cmd.LastInsertedId;

try
{
    cmd.CommandText = "INSERT INTO materias(MName, MProf) VALUES (@MName, @MProf)";
    cmd.Parameters.AddWithValue("@MName", txtMName.Text);
    cmd.Parameters.AddWithValue("@MProf", txtMProf.Text);

    cmd.ExecuteNonQuery();

    //The error is below
    cmd.CommandText = "INSERT INTO coursedisciplines(courseID, disciplineID) VALUES(id, SELECT MID FROM discipline WHERE MName = '"+ txtMName.Text +"')"; 
    cmd.ExecuteNonQuery();
}

你们知道出了什么问题吗?这种方法真的很糟糕吗?我读了一些关于序列化的内容,但不想这样做。

编辑它在这里工作。不得不使用select insert而不是select值。谢谢!

2 个答案:

答案 0 :(得分:0)

我不知道这是整个问题,但在

INSERT INTO coursedisciplines(courseID,disciplineID) 
VALUES(id, SELECT MID FROM discipline WHERE MName = '"+ txtMName.Text +"')

mysql将尝试插入courcedisciplines表中不存在的字段“id”中的值。您需要从前一个插入中获取id并在此查询中重用它。此子查询也需要处于paranthesis :( SELECT MID ... +“')(这可能是语法错误)

答案 1 :(得分:0)

您的第二个insert不正确。您需要insert . . . select而不是insert . . . values

INSERT INTO coursedisciplines(courseID,disciplineID)
    SELECT @id, MID
    FROM discipline WHERE MName = '"+ txtMName.Text +"';

我怀疑@id应该是查询中的参数,因此您可以将其传入。