Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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更新表_Mysql_Join_Insert - Fatal编程技术网

具有多连接的MySQL更新表

具有多连接的MySQL更新表,mysql,join,insert,Mysql,Join,Insert,我需要向表中添加一些记录,但只添加那些与某个链接表匹配的记录。 有三个表格如下: extension_prefs (extension_id, value, parameter) extension (id, client_id) client (id, parent_client_id) extension_prefs.extension_id = extension.id AND extension.client_id = client.id 这些将链接如下: extension_pre

我需要向表中添加一些记录,但只添加那些与某个链接表匹配的记录。 有三个表格如下:

extension_prefs (extension_id, value, parameter)
extension (id, client_id)
client (id, parent_client_id)
extension_prefs.extension_id = extension.id AND extension.client_id = client.id
这些将链接如下:

extension_prefs (extension_id, value, parameter)
extension (id, client_id)
client (id, parent_client_id)
extension_prefs.extension_id = extension.id AND extension.client_id = client.id
我需要在
extension\u prefs
中为属于具有特定
parent\u client\u id
的客户端的每个扩展插入4条记录。我不知道实现这一点的语法,尽管我觉得它非常简单

编辑:是的,我搞砸了,这些记录需要更新,不能插入

非常感谢


George

您可以为每个首选项调用以下查询,它将被保存以用于所有必要的扩展

更新: 以下查询将为首选项插入新行,如果存在,则更新现有行。
这假定extension_prefs表对extension_id和parameter列具有唯一的约束

INSERT INTO extension_prefs (extension_id, parameter, value)
  SELECT e.id, "key", "value"
   FROM extension e
   JOIN client c ON e.client_id = c.id
   WHERE c.parent_client_id = 123
ON DUPLICATE KEY
  UPDATE value = "value"

似乎我犯了一个错误,我需要更新扩展名prefs中的记录,因为它们已经存在。这将如何改变语法?您可以添加一个“ON replicate KEY”子句来处理这些问题,或者这是否意味着您只需要进行更新,而不需要插入?是的,对不起,我认为我把原始问题弄得一团糟。我应该说“我需要为客户机中具有某个父客户机id的所有记录更新extension\u prefs中的一组记录”。我觉得这容易多了?我能这样做吗<代码>更新扩展名前缀ep、扩展名e、客户端c设置ep.value='8450342222',其中ep.extension_id=e.id和e.client_id=c.id和ep.param='someparam'和c.parent_客户端_id=952非常好,谢谢。现在看起来更复杂了——对于一些扩展,我需要添加记录,对于其他扩展,我需要更新已经存在的内容。我想除了更新之外,我还应该用ON replicate KEY语句运行INSERT?有没有办法让它跳过已经存在的记录?