SQL: Select ohne Tabelle

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

SQL: Select ohne Tabelle

Beitrag 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?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SQL: Select ohne Tabelle

Beitrag von RSBasic »

Versuchs mal mit LEFT JOIN und IS NULL, siehe erste Antwort: http://stackoverflow.com/questions/1406 ... no-results
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: SQL: Select ohne Tabelle

Beitrag 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..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: SQL: Select ohne Tabelle

Beitrag 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...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: SQL: Select ohne Tabelle

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: SQL: Select ohne Tabelle

Beitrag 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

Code: Alles auswählen

id
1
3
4
5
7
Was aber mit 19 und 250 ist sagt er mir nicht.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: SQL: Select ohne Tabelle

Beitrag von bobobo »

19 und 250 sind halt nicht IN der Tabelle und das wollte doch gewusst werden im ersten Thread
(vertu ich mich ?)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: SQL: Select ohne Tabelle

Beitrag 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...
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: SQL: Select ohne Tabelle

Beitrag 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..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten