1

国IDを検索する必要があり、問題が発生しました。たとえば、国「ボリビア」を取り上げましょう。

国テーブルには「CountryName」と「AlternativeNames」があります

「ボリビア」の例です。

IdCountry  Name                             Code  AlternateNames
---------- -------------------------------- ----- ---------------------------
29         Bolivia, Plurinational State Of  BO    Bolivia, Bolivien, Bolivie

これは私が作成したクエリです:

SELECT cou.CountryID 
FROM Doppler2011.dbo.Country cou 
WHERE (cou.AlternateNames IS NOT NULL AND 'Bolivia' like '%'+cou.AlternateNames+'%') 
        OR 'Bolivia' like cou.Name

ご覧のとおりcou.AlternateNames、右側にある国の名前をいくつかの代替名と一致させる必要があります。名前がと同じ国のcou.Name場合、クエリは機能しますが、問題はそれらにあります。代替名と一致する必要があります

誰か助けてもらえますか?

ありがとう!

4

3 に答える 3

3

あなたはこのような他の用語のウィルカードを持っている必要があります

SELECT cou.CountryID 
        FROM Doppler2011.dbo.Country cou 
        WHERE cou.AlternateName like '%Bolivia%' OR cou.Name like 'Bolivia' 
于 2013-03-08T17:39:30.667 に答える
1

あなたの実際の構造に応じて、ここにいくつかの考えがあります。

AlternateName1つの列の値にコンマ区切りのリストとして格納され、Name常にリストの最初の値である場合は、Ateskiの回答AlternateNameを使用できます。

それがリストの最初の項目でない場合は、@AaronBertrandのコメントのアドバイスに従う必要があります。

SELECT cou.CountryID 
    FROM Doppler2011.dbo.Country cou 
    WHERE ',' + cou.AlternateName + ',' LIKE '%,Bolivia,%' 
      OR cou.Name ='Bolivia';

最後に、可能な国名のリストが得られるように構造を少し作り直すことができれば、次のようなものを思い付くことができます。

http://sqlfiddle.com/#!3/6d3c8/1

ただの別の見方。Ateskiのソリューションは完全に有効で優れています。

于 2013-03-08T18:12:18.037 に答える
1

where句は基本的に逆です。あなたは通常言う:

COLUMN_NAME like '%string_to_match%'
于 2013-03-08T17:42:15.327 に答える