【问题标题】:Inserting a list into a single column in Mysql在 Mysql 中将列表插入到单个列中
【发布时间】:2017-01-31 06:37:24
【问题描述】:

我有类似的东西:

  • 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();
}

你们知道哪里不对吗?这种方法真的很糟糕吗?我读了一些关于序列化的文章,但不想这样。

编辑它在这里工作。不得不使用选择插入而不是选择值。谢谢!

【问题讨论】:

  • 错误信息到底是什么?
  • 请添加特定语言的标签。是C# 还是什么?
  • 错误是:“行中有一个 sintax 错误,请检查文档”,类似的。上次我添加一种语言时,你们不赞成我询问它与 c# 的关系。所以,因为它只是关于mysql,我认为没有必要在帖子中添加c#。

标签: mysql


【解决方案1】:

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

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

mysql 将尝试从字段 'id' 中插入值,该字段在 courcedisciplines 表中不存在。您需要从前一个插入中获取 id 并在此查询中重用它。此外,子查询需要放在括号中: (SELECT MID ... +"') (这可能是导致语法错误的原因)

【讨论】:

  • 是的,它被选中了。感谢您的时间好友!
【解决方案2】:

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

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

我怀疑@id应该是查询中的参数,所以可以传入。

【讨论】:

  • 没错。 Id 是一个参数,当该人创建课程时我会得到它。现在它工作正常。我没有 15 声望,所以我不能投票给你。对不起。
猜你喜欢
  • 1970-01-01
  • 2013-04-19
  • 2021-01-05
  • 2013-03-26
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多