1

データベースに2つのSQLテーブルがあるというアイデアを実装しようとしています。

フィールドを持つテーブルInfoとフィールドを持つNationality他のテーブル。ExclusionKeyword

`Info.Nationality`               `Exclusion.Keyword`

    |British|                     |France|  
    |resteraunt de France|        |Spanish|
    |German|
    |Flag Italian|
    |Spanish rice|
    |Italian pasta
    |Irish beef|

私のWebアプリケーションでは、GridView4とを作成していてDataTable、SQLコマンドを入力しています。SqlDataAdapterGridView4

SELECT DISTINCT Info.Nationality WHERE Exclusion.Keyword NOT LIKE '%Spanish%'

そのSQLステートメントInfo.Nationalityは、スペイン語を含まないすべての個別のレコードを取得します。

私が現在行っているのは、vb.netにあるWebアプリで、2つの異なるデータを追加してGridViewsいることです。それぞれに各テーブルのデータがあります。つまりGridView2DISTINCT Info.Nationality上記の結果を表示するために別のテーブルを追加 します。GridView3Exclusion.KeywordGridView4SQL command

Info.Nationlityアイデアは、のキーワード制約によって抑制されていないすべての個別のレコードを取得することExclusion.keywordです。したがって、上記のSqlコマンドから、はGridView4「スペイン語」という単語を含まないすべてのレコードを取得します。

私はこれらすべてをネストされたforループで実行しています。最初のループでは、Info.Nationalityたとえばから各レコードを1つずつfor each row As DataRow in Me.GridView2.Rows()取得し、の最後まで続く2番目のforループと比較しExclusion.KeywordますFor i=0 To Gridview3 - 1

問題は、そのsqlステートメントで、比較する単語を明示的に指定する必要があることです。のレコードを追加し、Exclusion.Keywordその間のキーワードInをtheの名前にString置き換えてから、名前にパラメータを割り当ててみました。ただし、これは機能していません。文字列の最後のレコードと比較し、最初のレコードを無視しているだけです。SpanishNOT LIKEStringKeywordscmd.parameter.addwithvalue(@String, Keywords)

このすべての背後にある考え方は、のキーワードを含まないのすべてのレコードInfo.Nationalityを表示することです。GridView4Exclusion.Keyword

これを行うためのより簡単またはより効率的な方法はありますか?私は考えていましたInner Join with a Like commandが、それは私の問題ではありません。私の問題は、各レコードを1つずつ比較してInfo.Nationlity、一致しないレコードをExclusion.keyword取得し、一致するレコードを破棄するにはどうすればよいかということです。

次に、これらの変更を反映したり、変更に影響を与えたりせずに、変更のみGridview4にレコードを編集するにはどうすればよいですか。 Info.NationalityInserting to Exclusion.Keyword

ToString()後に追加して解決しましたasp.netWebText アプリでこれを試しましたが、機能しませんでした:(解決済み

 `SELECT DISTINCT Nationality 
FROM Info Where NOT EXISTS(SELECT * FROM Exclusion WHERE Info.Nationality LIKE '%' + @GridView +'%')`

`cmd.parameters.AddwithValue("@GridView", GridView3.Rows(i).Cells(0).Text.ToString())`

GridView3ここにExclusion.Keywordsデータがあります。

これに関するあなたの提案や考えを本当に感謝します。

4

1 に答える 1

1

一部の DBA はこのタイプのアプローチを好んで説明するため、この 1 つずつ行う必要はありません。単一の式として除外キーワードに一致しない Info.nationality からのレコードのみを返すクエリを作成する方法は多数あります。

私の好みは、EXISTS句と相関サブクエリを使用することです。

SELECT Nationality 
FROM Info I
WHERE NOT EXISTS(SELECT * FROM Exclusion WHERE I.Nationality LIKE '%' + Keyword + '%')

と表現することもできますleft join

SELECT I.Nationality 
FROM Info I
    LEFT OUTER JOIN Exclusion E 
        ON I.Nationality LIKE '%' + E.Keyword + '%'
WHERE E.Keyword IS NULL 

left joininfo からすべての行を返し、結合条件が一致する場合を除き、除外の列に null を挿入します。これらの値が null である場所のみをフィルタリングすることで、一致を回避できます。

于 2012-12-07T08:29:41.273 に答える