0

使用時にSQLを機能させることができないようですLIKE

DELETE FROM `customer_numbers` 
WHERE number NOT LIKE (SELECT number FROM number_part)%

テーブルに含まれていないconstomer_numbers場合、基本的にテーブルからすべての行を削除しますnumbernumber_part

例: customer_numbers.number = 0559354544 および number_part.number = 05593 - 削除しないでください..ただし、05593 が含まれていない場合はcustomer_numbers.number、customer_numbers テーブルから行を削除します..最初の 5 桁と一致する必要がありますnumber_part

4

5 に答える 5

2

リストで not like を使用することはできません (ほとんどのデータベースでは、これは mysql に当てはまると確信しています)。

代わりに、相関サブクエリを使用できます。

DELETE FROM `customer_numbers`
WHERE not exists (SELECT number FROM number_part
                  where customer_numbers.number like concat(number, '%')
                 )
于 2012-06-01T18:24:35.537 に答える
1

あなたのクエリはかなり壊れています。少なくとも 2 つの方法で:

  1. サブクエリは複数の行を返しますが、単一の結果を期待しているように見えます。

  2. LIKE 文字列を引用する必要があります。

2はおそらく簡単に修正できます。試す:

... WHERE number LIKE CONCAT((SELECT ... LIMIT 1),'%');

ただし、1は本当にあなたの問題です。サブセレクトを単一のコマンドとして実行すると、複数の行が得られると思いますよね? 1, 2, 3, 4, 5数字のリスト (たとえば) を LIKE 文字列の一部としてどのように扱うと思いますか?

あなたが望んでいるのはLIKE '1%' OR LIKE '2%' OR LIKE '3%'...、などのようなものだと思います...いいえ?

いずれにせよ、あなたが何をしようとしているのかをもっと正確に教えていただければ、おそらくあなたの問題をより良く解決できるでしょう.

あなたの質問の言葉どおり、私が言えることは 、そのようには機能しないということだけです。

于 2012-06-01T18:25:41.707 に答える
1

フィールド番号に名前を付けましたが、先行する 0 のために文字値のように見えるので、文字フィールドであると仮定します。

部品番号が常に 5 文字になる場合は、次の手順を実行できます。

DELETE FROM `customer_numbers` 
WHERE substring(number,1,5) NOT IN (SELECT number FROM number_part)
于 2012-06-01T19:11:38.237 に答える
0
  1. 数値フィールドに対して LIKE を実行することはできません。
  2. DISTINCT ではないサブセレクトに対して等価を実行することはできません。

「IN」を使用する必要があります。

DELETE FROM `customer_numbers` WHERE number NOT IN (SELECT number FROM number_part)
于 2012-06-01T18:24:08.723 に答える
0

このようなものはどうですか:

DELETE FROM customer_numbers WHERE number NOT IN (SELECT number FROM number_part)
于 2012-06-01T18:24:30.663 に答える