Seite 1 von 1
SQL: Select ohne Tabelle
Verfasst: 08.03.2015 14:32
von dige
Hi. Ich habe eine Liste mit IDs im RAM und möchte prüfen, welche davon _nicht_ in einer
SQL Tabelle enthalten sind.
Mit UNION ALL könnte man ein Select mit eignen Werten machen, leider klappt
dann die WHERE Klausel nicht..hat jemand eine Idee?
Code: Alles auswählen
Define.s SQL
ForEach IDList ()
If SQL <> ""
SQL + " UNION ALL "
EndIf
SQL = "SELECT " + Str(IDList())
Next
SQL + " FROM WHERE NOT IN (SELECT ID FROM Tabelle)"
..oder geht das nur über eine Zwischentabelle, in die ich zunächst die IDs aus der
Liste kippe und diese Tabelle dann mit der anderen Tabelle vergleiche?
Re: SQL: Select ohne Tabelle
Verfasst: 08.03.2015 14:43
von RSBasic
Versuchs mal mit LEFT JOIN und IS NULL, siehe erste Antwort:
http://stackoverflow.com/questions/1406 ... no-results
Re: SQL: Select ohne Tabelle
Verfasst: 11.03.2015 11:03
von dige
Hi RSBasic, Danke für den Tipp. Der hilft mir aber nicht richtig weiter, da dort die Ergebnisse aus zwei Tabellen verglichen werden.
Ich möchte aber beliebige Werte Selektieren, die nicht in einer Tabelle enthalten sind.
Ein Query in der Art, der so aber nicht funktioniert:
Code: Alles auswählen
Select ID FROM VALUES(1, 2, 4, 10, 12, 5) WHERE ID NOT IN (SELECT ID FROM Tabelle)
Also ich habe eine Menge an IDs und möchte wissen, welche davon in einer Datenbank-Tabelle nicht enthalten sind
und wollte versuche, das gleich mit einem SQL Query zu erledigen..
Re: SQL: Select ohne Tabelle
Verfasst: 11.03.2015 15:29
von dige
Ich löse es jetzt doch anders und werde alle IDs aus der Tabelle in eine MAP laden und dann mit den IDs aus dem Array abgleichen...
Re: SQL: Select ohne Tabelle
Verfasst: 13.03.2015 17:01
von bobobo
und so ?
Code: Alles auswählen
;CREATE TABLE Tabelle (Id INTEGER PRIMARY KEY, Name TEXT, zahl NUMERIC)
idliste.s=" 1 7 19 250 3 4 5 " ; Leerzeichendrumrum
Debug idliste
UseSQLiteDatabase()
db=OpenDatabase(#PB_Any,"D:\!\test.s3db","","",#PB_Database_SQLite)
query.s="Select id from tabelle where id in ("+ReplaceString(Trim(idliste)," ",",")+")"
; aus der Idliste mache ich hier eine Liste mit der SQLite was anfangen kann
; " 1 7 19 250 3 4 5 " => "1,7,19,250,3,4,5"
If DatabaseQuery(db,query)
cols=DatabaseColumns(db)
While NextDatabaseRow(db)
tmp.s=GetDatabaseString(db,0)
;Debug tmp
idliste = ReplaceString(idliste," "+tmp+" "," ")
Wend
CloseDatabase(db)
EndIf
Debug idliste
Re: SQL: Select ohne Tabelle
Verfasst: 13.03.2015 20:41
von Andreas21
Die Idee hatte ich auch schon.
Das Problem ist aber das er die IDs wissen will die nicht in der Datenbank drin sind.
Selbst mit "NOT IN" bekommt man nur die IDs die in der Datenbank schon vorhanden sind.
Bei meiner test DB ID von 1 bis 12.
Wenn ich die abfrage nun mache mit "IN" bekomme ich
Was aber mit 19 und 250 ist sagt er mir nicht.
Re: SQL: Select ohne Tabelle
Verfasst: 17.03.2015 19:49
von bobobo
19 und 250 sind halt nicht IN der Tabelle und das wollte doch gewusst werden im ersten Thread
(vertu ich mich ?)
Re: SQL: Select ohne Tabelle
Verfasst: 17.03.2015 21:43
von Andreas21
Ich versteh das so das er nur die ids zurück bekommen möchte die nicht enthalten sind.
Wenn er die ids wieder bekommt die vorhanden sind, ist das eigentlich das gleiche als wenn er alle ids ladet und dann vergleicht. Und das wolte er ja nicht.
dige hat geschrieben:Ich löse es jetzt doch anders und werde alle IDs aus der Tabelle in eine MAP laden und dann mit den IDs aus dem Array abgleichen...
Re: SQL: Select ohne Tabelle
Verfasst: 18.03.2015 11:57
von dige
Ja, Bobo, so meinte ich es. Ich will letztlich damit prüfen, welche Objekte in einer Tabelle keine Referenz haben.
Meine HashMap Lösung ist noch nicht so optimal.. aber ich glaube per SQL geht sowas nicht..