【问题标题】:Joining Table with substring condition使用子字符串条件连接表
【发布时间】:2013-05-13 21:16:24
【问题描述】:

我有两张桌子:

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 说:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在 'int) 附近,其中 tblpeserta.id 为空

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

【问题讨论】:

  • 不应该是CAST(SUBSTRING(t2.number,8,5) AS UNSIGNED)吗?实际上,我不太清楚你为什么需要在这里投射。
  • 因为 t1 中的数字是 int zerofill 而 t2 中的数字是 varchar,所以我需要将其转换为 int 以便可以比较 t1.number 和 t2.number

标签: mysql join substring outer-join


【解决方案1】:

试试

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

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    相关资源
    最近更新 更多