3

SQL の LIKE 演算子と NOT LIKE 演算子を理解するのに問題があります。これは私が実行したクエリです:

select serial_number from UNIT U 
group by serial_number
order by serial_number

2000 の結果が得られます。

このクエリを実行すると、1950 の結果が得られます。

select serial_number from UNIT U 
WHERE op_name LIKE 'Assembly'
group by serial_number
order by serial_number

したがって、このクエリを実行すると、50 件の結果が得られると予想されますが、代わりに 2000 件が返されます。

select serial_number from UNIT U 
WHERE op_name NOT LIKE 'Assembly'
group by serial_number
order by serial_number

説明はありますか?本当にありがとう。

4

3 に答える 3

3

あなたがしているグループは、あなたが試みている種類のカウント比較を行うことを実際には無効にします。10 個の一意のシリアル番号があり、これらのシリアル番号ごとに 2 つの行 (合計 20 行) があり、1 つには op_name "Xyz" があり、もう 1 つには op_name "Assembly" があるとします。最初のクエリは 10 行を返します。2 番目のクエリは 10 行を返します。3 番目のクエリは 10 行を返します。グループのため、LIKE "Assembly" と NOT LIKE "Assembly" は相互に排他的ではありません。

于 2012-07-28T00:13:28.670 に答える
2

NULLどちらLIKEでもないNOT LIKE


実は、もっと注意深く数字を読み直すと、別の原因があるかもしれません。(私の以前の指摘は真実ですが、これはより可能性が高いです。)

次のデータがあるとします。

serial_number | op_name
--------------+---------
1             | Assembly
1             | Not

1両方のクエリで返されます。

于 2012-07-28T00:07:53.790 に答える
0

ワイルドカード%を使用LIKEしないと、=.

値が何であるかを確認して確認してください... を使用している場合はLIKE、ワイルドカードも使用する可能性があります。たとえば、次のようになります。

unit U WHERE op_name NOT LIKE '%Assembly%' group から serial_number を選択 serial_number order by serial_number

于 2012-07-28T00:05:07.010 に答える