INNER JOIN?

30/04/2009 - 23:55 von Paul Boyer | Report spam
Hallo,

ich möchte in einer einzigen Tabelle prüfen, ob gewisse Feldwerte
doppelt vorkommen und diese dann ausgeben.

Geht das über INNER JOIN, oder muss ich durch alle recordsets iterieren
und per Hand jeden Datensatz gegen jeden anderen Datensatz prüfen?

Danke!

Gruß, Paul
 

Lesen sie die antworten

#1 Peter Götz
01/05/2009 - 09:08 | Warnen spam
Hallo Paul,

ich möchte in einer einzigen Tabelle prüfen, ob gewisse
Feldwerte doppelt vorkommen und diese dann ausgeben.

Geht das über INNER JOIN,



Um alle Datensàtze mit einem bestimmten Wert in
einem FeldX zu finden, brauchst Du eine Select-
Statement mit entsprechender Where-Klausel:

Select * From Tabelle Where FeldX = 123

oder muss ich durch alle recordsets iterieren



Durch welche Recordsets?
Mit

Select * From Tabelle

würdest Du ein einziges Recordset erstellen können,
welches alle Datensàtze der Tabelle "Tabelle" enthàlt.

und per Hand jeden Datensatz gegen jeden anderen
Datensatz prüfen?



Nein, natürlich nicht.
Eine entsprechende Where-Klausel schrànkt die Auswahl
der Datensàtze entsprechend ein.

Kleines Beispiel, bei dem ich davon ausgehe, dass
Du mit ADO arbeitest und bereits ein ADODB.Connection-
Objekt (mCNN) erstellt und geöffnet hast.

Option Explicit
Private WithEvents mCNN As ADODB.Connection

Private Sub AnySub()
Dim RS As ADODB.Recordset
Dim strSQL As String

' SQL-Statement mit Where-Klausel für
' Felder mit Text (String).
strSQL = "Select * From Tabelle Where FeldX = 'abc"

' oder

' SQL-Statement mit Where-Klausel für Felder
' mit numerischen Werten.
strSQL = "Select * From Tabelle Where FeldZ = 123"

Set RS = New ADODB.Recordset
With RS
Set .ActiveConnection = mCNN
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open
End With

MsgBox _
"Das RS enthàlt " & _
CStr(RS.RecordCount) & _
" Datensàtze", vbInformation

' Das nachfolgende RS.MoveFirst ist nicht notwendig,
' wenn das RS wie hier gerade neu erstellt worden ist.
' Der Datensatzzeiger steht dann ohnehin auf dem
' ersten Datensatz.
RS.MoveFirst

' und so kannst Du alle Datensàtze Deines Recordsets
' durchlaufen um die Werte anzusehen oder eben auch
' irgendwas anderes damit zu machen.
Do Until RS.EOF
Debug.Print RS.Fields(0).Value & "; " & _
RS.Fields(1).Value & "; " & _
RS.Fields(2).Value & "; " & _
RS.Fields(x).Value

RS.MoveNext
Loop

End Sub

Mehr zum Thema findest Du unter

www.gssg.de ->Visual Basic ->VBclassic
-> Datenbank


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen