如何找到与另一个表中另一行的第一个单词匹配的行?

时间:2014-02-22 22:37:27

标签: mysql

我想要做的是从interv中选择一些行,其中interv.Ordeds中的第一个单词等于drug.Products中的第一个单词。如果这是真的,我想更新interv.Generic与药物的值.Generic(但我在得到错误之前没有那么远),这是我得到了多远,如果可以请帮助:

select * from
interv 
left outer join drugs on ((SELECT SUBSTRING_INDEX( `OrderS` , ' ', 1 ) 
FROM `interv`) = (SELECT SUBSTRING_INDEX( `ProductD` , ' ', 1 ) FROM `drugs`))

当我这样做时,我收到错误: 错误代码:1242子查询返回超过1行

旁注:我也会满足于在interv.Orders中有一定数量的字符等于药物中的一定数量的字符。产品但是我不知道如何用类似的声明来完成这个。

1 个答案:

答案 0 :(得分:0)

您只需在substring_index()子句中使用on即可完成此操作:

select *
from interv i left outer join
     drugs d
     on substring_index(Orders, ' ', 1) = substring_index(ProductD, ' ', 1);

如果您想在update查询中执行此操作:

update interv i join
       drugs d
       on substring_index(Orders, ' ', 1) = substring_index(ProductD, ' ', 1)
    set i.Generic = d.Generic;

编辑:

每个表中有多个相同的第一个单词。你可以这样做:

select substring_index(Orders, ' ', 1) as word, count(*) as cnt
from drugs
group by substring_index(Orders, ' ', 1) 
having cnt > 1
order by cnt desc, word;

然后在另一张桌子上进行类似的查询。