我想要做的是从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中有一定数量的字符等于药物中的一定数量的字符。产品但是我不知道如何用类似的声明来完成这个。
答案 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;
然后在另一张桌子上进行类似的查询。