mysql - 使用子字符串条件连接表

标签 mysql join substring outer-join

我有两个表:

create table t1(
id int unsigned not null auto_increment,
group varchar(3) not null,
number int unsigned zerofill,
used enum('YES','NO') default );

id   group   number  used
1    '110'   00001   'YES'
2    '110'   00002   'YES'
3    '110'   00003   'YES'
4    '210'   00001   'YES'
5    '210'   00002   'YES'
6    '210'   00003   'YES'
7    '310'   00001   'YES'

create table t2(
id int unsigned not null auto_increment,
number varchar(13) default null);

id   number  
1    '110-00001'
2    '110-00002'
3    '210-00002'
4    '310-00001'

我的第一个目标是找到 t1 中未在 t2 中使用的每条记录:

查询结果:

id   group   number  used
3    '110'   00003   'YES'
4    '210'   00001   'YES'
6    '210'   00003   'YES'

我的第二个目标是将列设置为“否”:

id   group   number  used
3    '110'   00003   'NO'
4    '210'   00001   'NO'
6    '210'   00003   'NO'

我试过这样使用查询:

  select * from t1 
left outer join t2 
             on t1.number = cast(substring(t2.number,8,5) as int) 
          where t2.id is null;

但是 mySQL 说:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int) where tblpeserta.id is null

有没有更好的查询来解决我的问题?!​​

最佳答案

尝试

UPDATE t1 LEFT JOIN t2
    ON t1.`group` = LEFT(t2.number, 3)
   AND t1.number = 0 + RIGHT(t2.number, 5)
   SET t1.used = 'NO'
 WHERE t2.id IS NULL

和选择

SELECT *
  FROM t1 LEFT JOIN t2
    ON t1.`group` = LEFT(t2.number, 3)
   AND t1.number = 0 + RIGHT(t2.number, 5)
 WHERE t2.id IS NULL

输出:

| ID | GROUP | NUMBER | USED |
------------------------------
|  3 |   110 |      3 |   NO |
|  4 |   210 |      1 |   NO |
|  6 |   210 |      3 |   NO |

SQLFiddle

关于mysql - 使用子字符串条件连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630466/

相关文章:

php - MySQL:每个日期的组事件

MySQL连接与AVG计算

c++ - 如何从一个字符串中提取多个子字符串?

JOIN 中的 MySQL LIMIT

mysql - 将 MySQL JOIN 放回数据库而不是仅仅返回列

postgresql - 如何用postgres中的子字符串替换字符串?

algorithm - Knuth-Morris-Pratt 算法中的前缀函数计算

php - 关于在mysql数据库中存储值的疑问

mysql - 如何在 MySQL 中声明宽字符数据类型

mysql - findOne 没有得到任何记录