3

ここで何が問題なのかよくわかりません。データベースが正しく機能していないことを知っています。

2つはいくつかの基本的なデータ構造を示しており、表1は次のようになっています。

      name         | inGameID
Azure Plagioclase  |  17455
   Plagioclase     |  18
  viscous Pyroxeres|  17460
      Onyx Ochre   |  1232

表2は次のようになります

  userName  |    item
     sam    |   Onyx Ochre
    mike    |   viscous Pyroxeres
     dave   |    azure plagioclase

このクエリを実行しようとすると

SELECT fl.item, od.name 
FROM oreData od
JOIN fleetLog fl ON lower(od.name) = lower(fl.item)
order by fl.logID asc

結果は、オニキス黄土色の値のみです。はるかに多くのデータが返される必要がある場合。t1.nameとt2.itemの両方が同じデータ型を持っています。この問題を診断するために、これ以上の詳細が必要かどうかはわかりませんが、これについてさらに詳しく調べてみたいと思います。詳細をお知らせします。これが非常に曖昧であることをお詫びします。これまでにこのような問題に遭遇したことはありません。

君たちは頭に釘を打った。これらの値の前または最後に余分な空白がありました。これを解決するための最良の方法は何でしょうか?

'39';'2';'1';'2001-03-13 00:14:27';'userName';'322';'Vivid Hemorphite
'
'38';'2';'1';'2001-03-13 00:19:28';'userName';'6386';'Azure Plagioclase
'
4

1 に答える 1

2

君たちは頭に釘を打った。これらの値の前または最後に余分な空白がありました。これを解決するための最良の方法は何でしょうか?

  1. そのようなデータがデータベースに入らないようにアプリケーションコードを修正してください。これが不可能な場合は、データベース内でトリガーを定義して、書き込み操作中に必要に応じて文字を削除できます。

    CREATE TRIGGER oreData_ins  BEFORE INSERT ON oreData  FOR EACH ROW
    SET NEW.name = TRIM(NEW.name);
    
    CREATE TRIGGER oreData_upd  BEFORE UPDATE ON oreData  FOR EACH ROW
    SET NEW.name = TRIM(NEW.name);
    
    CREATE TRIGGER fleetLog_ins BEFORE INSERT ON fleetLog FOR EACH ROW
    SET NEW.item = TRIM(NEW.item);
    
    CREATE TRIGGER fleetLog_upd BEFORE UPDATE ON fleetLog FOR EACH ROW
    SET NEW.item = TRIM(NEW.item);
    
  2. 既存のデータを更新します。

    UPDATE oreData  SET name = TRIM(name);
    UPDATE fleetLog SET item = TRIM(item);
    
于 2013-01-03T17:30:43.410 に答える