首页 > 解决方案 > SQL Join 和条件

问题描述

我有一个案例:

表格1:

+------------+---------------+----------------------+
| Address_id |   road name   |        suburb        |
+------------+---------------+----------------------+
| 500011     | Bealey avenue | Christchurch Central |
+------------+---------------+----------------------+

表 2:

+--------+------------------------------------------------+--------+
| Job_id |                  streets name                  | suburb |
+--------+------------------------------------------------+--------+
| 15678J | Bealey avenue, Salisbury Street, Gordon avenue |        |
+--------+------------------------------------------------+--------+

如何编写 SQL 查询以在两个条件下加入表:

  1. 郊区应该匹配

  2. Table 1(在本例中为 Bealey 大道)中的道路名称应该在Table 2.

我需要加入这两个表的条​​件是,郊区应该在两者中完全匹配,并且道路名称“Bealey avenue”Table 1应该在其他街道名称中Table 2

标签: mysql

解决方案


尽管我完全同意您应该尽可能避免这种表格设计的评论,但这里有一个您可以使用的可能解决方案。

示例表设置:

create table table1 (
    address_id int,
    road_name varchar(50),
    suburb varchar(50)
);

create table table2 (
    job_id varchar(50),
    streets_name varchar(250),
    suburb varchar(50)
);

insert into table1 
values (500011, 'Bealey avenue', 'Christchurch Central');

insert into table2
values ('15678J', 'Bealey avenue, Salisbury Street, Gordon avenue', 'Christchurch Central');

询问:

select * 
from table1 t1 
join table2 t2 on 
    t1.suburb = t2.suburb 
    and t2.streets_name REGEXP CONCAT('\\b', t1.road_name, '\\b')

在 db-fiddle 上与此处的查询进行交互


推荐阅读