假设我有一个包含
的描述列Column Description
------------------
I live in USA
I work as engineer
我还有另一张包含国家/地区列表的表格,因为在第一行中提到了美国(国家/地区名称),我需要该行。
在第二种情况下,没有国家/地区名称,因此我不需要该列。
请你澄清一下
答案 0 :(得分:1)
这是一个非常糟糕的主意,加入像这样的任意文本。这将非常缓慢甚至可能无法正常工作..试一试:
select t1.description, c.*
from myTable t1
left join countries c on t1.description like CONCAT('%',c.countryCode,'%')
答案 1 :(得分:1)
您可能想尝试以下内容:
SELECT cd.*
FROM column_description cd
JOIN countries c ON (INSTR(cd.description, c.country_name) > 1);
如果您使用的是SQL Server,则应该能够使用CHARINDEX()
函数而不是INSTR()
,这可用于MySQL和Oracle。您也可以使用LIKE
作为其他答案。
测试用例:
CREATE TABLE column_description (description varchar(100));
CREATE TABLE countries (country_name varchar(100));
INSERT INTO column_description VALUES ('I live in USA');
INSERT INTO column_description VALUES ('I work as engineer');
INSERT INTO countries VALUES ('USA');
结果:
+---------------+
| description |
+---------------+
| I live in USA |
+---------------+
1 row in set (0.01 sec)
答案 2 :(得分:0)
从你的帖子中找不到它,但我想你要求返回表格中包含含有某个国家名称的描述的所有行?如果是这种情况,您可以像下面这样使用sql LIKE运算符。
select
column_description
from
description_table
where
column_description like %(select distinct country_name from country)%
如果不是,我认为你唯一的另一个选择就是Dans post。
享受!
答案 3 :(得分:0)
到目前为止,所有建议似乎与部分字词匹配,例如'我是USAIN BOLT'将匹配国家'USA'。这个问题意味着应该对整个单词进行匹配。
如果文本完全由字母数字字符组成,并且每个单词都用空格字符分隔,则可以使用类似的内容
Descriptions AS D1
LEFT OUTER JOIN Countries AS C1
ON ' ' + D1.description + ' '
LIKE '%' + ' ' + country_name + ' ' + '%'
但是,“句子”意味着标点符号,例如上述内容无法与“我在美国,果阿和伊朗工作”相提并论。您需要在开始匹配之前分隔单词。令人高兴的是,已经有解决这个问题的方案,例如SQL Server等中的全文搜索。为什么重新发明轮子?
另一个问题是,一个国家/地区可以使用多个名称,例如我的国家可以合法地称为“英国”,“英国”,“GB”(根据我的stackoverflow简介),“英格兰”(如果你问我的孩子)和“大不列颠及北爱尔兰联合王国”(后者就是我的护照上所说的内容,并且它不适合您的NVARCHAR(50)
栏;)仅举几例。