Vergleich von Aufzeichnungen von zwei Tabellen und Vercasting von Spielen

Ich versuche, eine Idee zu implementieren, wo ich zwei SQL-Tabellen in einer database habe.

Tabelle Info die ein Feld Nationality und die andere Tabelle Exclusion die ein Feld Keyword .

 `Info.Nationality` `Exclusion.Keyword` |British| |France| |resteraunt de France| |Spanish| |German| |Flag Italian| |Spanish rice| |Italian pasta |Irish beef| 

In meiner Web-Anwendung SqlDataAdapter ich ein GridView4 und durch eine DataTable und SqlDataAdapter Ich bevölkern das GridView4 mit dem SQL-Befehl:

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

Diese SQL-statement ruft alle ausgeprägten datasätze in Info.Nationality , die nicht das Wort spanisch enthalten.

Was ich gerade tue, ist, dass in der Web-App, die in vb.net ist, füge ich zwei verschiedene GridViews , jeder hat die data jeder Tabelle, was bedeutet, dass GridView2 hat DISTINCT Info.Nationality und GridView3 hat Exclusion.Keyword und dann ein weiteres hinzufügen GridView4 , um die Ergebnisse des obigen SQL command anzuzeigen.

Die Idee ist, alle ausgeprägten datasätze aus Info.Nationlity die nicht durch die Keyword-Constraints in Exclusion.keyword unterdrückt werden. So aus dem oben erwähnten Sql-Befehl wird der GridView4 alle datasätze abrufen, die nicht das Wort "Spanisch" haben.

Ich mache das alles in einer verschachtelten loop, wo in der ersten loop jeder datasatz (eins nach dem anderen) von Info.Nationality zB for each row As DataRow in Me.GridView2.Rows() und vergleicht es mit dem zweiten für loop, die bis zum Ende des Exclusion.Keyword For i=0 To Gridview3 - 1 das wäre wie For i=0 To Gridview3 - 1 .

Das Problem ist, dass in dieser SQL-statement muss ich explizit das Wort zu vergleichen, um zu vergleichen. Ich habe versucht, die datasätze von Exclusion.Keyword in einem String hinzuzufügen und dann das Spanish Schlüsselwort zwischen dem NOT LIKE mit dem Namen des cmd.parameter.addwithvalue(@String, Keywords) ist und dann den Namen einen Parameter mit cmd.parameter.addwithvalue(@String, Keywords) . Allerdings funktioniert das nicht, es ist nur Vergleich mit dem letzten datasatz in der characterfolge und ignoriert die erste.

Die Idee hinter all dem ist, alle Aufzeichnungen von Info.Nationality in GridView4 die die Schlüsselwörter in Exclusion.Keyword nicht enthalten.

Gibt es eine einfachere oder effizientere Möglichkeit, dies zu tun? Ich dachte an einen Inner Join with a Like command aber das ist nicht mein Problem. Mein Problem ist, dass, wie kann ich jeden datasatz eins nach einer von Info.Nationlity mit allen datasätzen in Exclusion.keyword und dann die Info.Nationlity , die nicht übereinstimmen und vercasting die, die übereinstimmen.

Dann in Gridview4 Wie kann ich die datasätze bearbeiten, ohne diese Änderungen zu reflektieren oder in Info.Nationality , sondern nur Inserting to Exclusion.Keyword die Änderungen.

Gefährdet durch Hinzufügen von ToString() nach Text In meiner asp.net Web App habe ich das versucht, aber nicht funktioniert: ( LÖST )

  `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 Hier haben die Exclusion.Keywords data.

Würde wirklich schätzen Ihre Vorschläge und Gedanken um diese.

Du brauchst das nicht einzeln zu tun, oder "Row by quälende Zeile", da einige DBAs gern diese Art von Ansatz beschreiben. Es gibt viele Möglichkeiten, eine Abfrage zu schreiben, um nur die datasätze von Info.nationality zurückzugeben, die nicht mit den Ausschlussschlüsseln als einziger Ausdruck übereinstimmen.

Meine Vorliebe ist die Verwendung der EXISTS Klausel und eine korrelierte Unterabfrage:

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

Sie können dies auch als left join ausdrücken.

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

Die left join gibt alle Zeilen aus Info zurück und fügt Nulls in die Spalten für Ausschluss ein, außer wenn die Join-Kriterien übereinstimmen. Durch die Filterung nur dort, wo diese Werte null sind, können Sie die Spiele vermeiden.