Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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_Sql - Fatal编程技术网

Mysql 连接两个表并在条件满足时替换值

Mysql 连接两个表并在条件满足时替换值,mysql,sql,Mysql,Sql,我想用一个表达式来连接两个表,前两个表得到类似于第三个表的东西 我想选择“Sitepage”和“Medium”,并将前两个表连接到“Sitepage”和“Campaign ID”之间右5个字符匹配的行中。此外,如果存在匹配项,则“程序”将替换“介质”。语法是什么 Sitepage | Medium xyz.com/campaign=12345 | A xyz.com/campaign=23456 | C Campaign

我想用一个表达式来连接两个表,前两个表得到类似于第三个表的东西

我想选择“Sitepage”和“Medium”,并将前两个表连接到“Sitepage”和“Campaign ID”之间右5个字符匹配的行中。此外,如果存在匹配项,则“程序”将替换“介质”。语法是什么

Sitepage | Medium                 
xyz.com/campaign=12345 | A           
xyz.com/campaign=23456 | C        

Campaign ID | Program                 
12345 | B           

Sitepage | Medium                 
xyz.com/campaign=12345 | B           
xyz.com/campaign=23456 | C        
您可以使用子字符串索引,然后通过联接进行更新

update table1 t1
join table2 t2 on t2.`Campaign ID` = substring_index(t1.`Sitepage`,'=',-1)
set t1.`Medium` = t2.`Program`
您可以使用子字符串索引,然后通过联接进行更新

update table1 t1
join table2 t2 on t2.`Campaign ID` = substring_index(t1.`Sitepage`,'=',-1)
set t1.`Medium` = t2.`Program`
这应该能奏效。左连接到您想要的表达式上,当有匹配项时,程序将不为空,以便您可以拾取它,否则拾取中等。如果您的table2允许程序为空,您可能需要对此进行调整


这应该能奏效。左连接到您想要的表达式上,当有匹配项时,程序将不为空,以便您可以拾取它,否则拾取中等。如果您的table2允许程序为空,您可能需要对此进行调整。

我的答案基于@Juan的答案,但我必须进行一些调整才能使其正常工作

SELECT
  SitePage, COALESCE(t2.Program, t1.Medium) as Medium
FROM Table1 t1
LEFT JOIN Table2 t2
ON RIGHT(t1.Sitepage, 5) = COALESCE(t2.`Campaign ID`, -1);
@阿比克也朝着正确的方向前进。它比上面的更通用,它假设SitePage的最后5个字符是唯一相关的字符。话虽如此,我还是会和

SELECT
  SitePage, COALESCE(t2.Program, t1.Medium) as Medium
FROM Table1 t1
LEFT JOIN Table2 t2
  ON SUBSTRING_INDEX(t1.Sitepage,'=',-1)
    = COALESCE(t2.`Campaign ID`, -1);

我的答案是基于@Juan的,但我必须做一些调整才能让它起作用

SELECT
  SitePage, COALESCE(t2.Program, t1.Medium) as Medium
FROM Table1 t1
LEFT JOIN Table2 t2
ON RIGHT(t1.Sitepage, 5) = COALESCE(t2.`Campaign ID`, -1);
@阿比克也朝着正确的方向前进。它比上面的更通用,它假设SitePage的最后5个字符是唯一相关的字符。话虽如此,我还是会和

SELECT
  SitePage, COALESCE(t2.Program, t1.Medium) as Medium
FROM Table1 t1
LEFT JOIN Table2 t2
  ON SUBSTRING_INDEX(t1.Sitepage,'=',-1)
    = COALESCE(t2.`Campaign ID`, -1);

谢谢,我想这就是我想要的答案,但我得到的是,在解析函数时没有声明函数'isnullstring,string'。我怎样才能解决这个问题?是的,使用凝聚。我主要在MS SQL Server上工作,这里有ISNULL:谢谢,我想这就是我要寻找的答案,但我得到的是,解析函数时没有声明函数“isnullstring,string”。我怎样才能解决这个问题?是的,使用凝聚。我主要在MS SQL Server上工作,我们在那里有ISNULL: