加入两个表并替换条件满足的值

时间:2015-04-29 14:51:58

标签: mysql sql

我正在尝试使用表达式来连接两个表(前两个)以获得类似第三个表的内容。

我想选择'Sitepage'和'Medium'并将前两个表加入到'Sitepage'和'Campaign ID'之间匹配的RIGHT 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        

http://i.stack.imgur.com/pq35n.png

3 个答案:

答案 0 :(得分:2)

我根据@ 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);

@Abhik也朝着正确的方向前进。它比上面的更通用,它假设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);

SQL Fiddle example

答案 1 :(得分:1)

您可以使用substring_index然后通过加入

进行更新
update table1 t1
join table2 t2 on t2.`Campaign ID` = substring_index(t1.`Sitepage`,'=',-1)
set t1.`Medium` = t2.`Program`

答案 2 :(得分:1)

$

这应该可以解决问题。左边加入你想要的表达,当有匹配时,程序不会为空,所以你可以拿起它,否则选择中等。如果你的table2在Program上允许null,你可能需要调整它。