我有2张这样的表,
表1
Id Locations
-- ---------
1 India, Australia
2 US , UK
表2
Table2Id Location
-------- --------
101 Italy
102 UK
103 Hungary
104 India
如果table2中的Locations
在table1中包含Location
字段,我需要在条件内连接这两个表。结果就像
Id Table2Id Location Locations
-- -------- -------- ---------
1 104 India India, Australia
2 102 UK US , UK
我试过像
这样的东西Select t1.id,
t2.Table2Id,
t1.Locations,
t2.Location
From Table1 t1
Inner join Table2 t2 On CONTAINS(t1.Locations, t2.Location)
但是contains
的第二个参数应该是一个字符串。它不允许在那里给出列名。
我无法在查询中使用temptable
或variable
。因为此查询需要在名为ExactTarget
的电子邮件广告系列工具上运行,而该工具不支持temptable
和variables
。
任何帮助都将受到高度赞赏。谢谢。
答案 0 :(得分:8)
SQLFiddle example SQL {/ 3> SQLFiddle example
表格和数据
create table table1 (id int, locations varchar(100));
insert into table1 values
(1, 'India, Australia'),
(2, 'US, UK');
create table table2 (table2id int, location varchar(100));
insert into table2 values
(101, 'Italy'),
(102, 'UK'),
(103, 'Hungary'),
(104, 'India');
MySQL查询
select
table1.id,
table2.table2id,
table2.location,
table1.locations
from table1
join table2 on table1.locations like concat('%', table2.location, '%')
SQL Server查询
select
table1.id,
table2.table2id,
table2.location,
table1.locations
from table1
join table2 on table1.locations like '%' + table2.location + '%'
修改强>
如果美国地理位置包含在国家/地区名称中,则上述查询可能无法正常运行。要解决该问题,可以使用
进行查询select
table1.id,
table2.table2id,
table2.location,
table1.locations
from table1
join table2 on
',' + replace(table1.locations,', ', ',') + ',' like '%,' + table2.location + ',%'
此查询会强制India, Australia
成为,India,Australia,
。然后将其与,US,
进行比较,因此不会出现不正确的结果。
答案 1 :(得分:1)
如果您使用的是Mysql,可以查看以下选项: INSTR
select table2id, location, table1.id, locations
from table2 inner join table1 on instr(locations,location) >= 1;
答案 2 :(得分:0)
我是SQL界的新手,我遇到了这个问题。比实际大得多,但这是获得我想要的最后一块拼图。
以下是我如何解决它:
SELECT * FROM t1 CROSS JOIN t2
WHERE t1.Locations CONTAINS t2.Location;
根据我们使用的语言使用CONTAINS
。
想想我有多接近放弃这个难题,解决方案到底有多简单。