私は2つのテーブルを持っています:
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'
私の最初の目標は、t2 で使用されていない t1 のすべてのレコードを見つけることです。
クエリ結果:
id group number used
3 '110' 00003 'YES'
4 '210' 00001 'YES'
6 '210' 00003 'YES'
そして、私の2番目の目標は、以前は「NO」だった列を設定することです:
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 構文にエラーがあります。tblpeserta.id が null の場合、near 'int) を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
私の問題に対するより良いクエリはありますか?!