SQL Datensätze mit bestimmten ID´s anzeigen lassen?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

ich versuche gerade Datensätze mit bestimmten ID´s über
eine SQL-Abfrage in einer MySQL-DB anzeigen zu lassen.

Ich würde es so realisieren:
Code:
SELECT id, vorname, nachname FROM personen WHERE id = 1 OR id = 3 OR id = 5 ... OR id = 999

Es sind allerdings über 500 ID`s - kann ich das auch anders machen?
Mir liegen die ID´s aktuell mit einer Trennung über ein Komma vor.
Es sind auch keine Bereiche sondern willkürliche ID´s.
 
Hi Dsimon,

ich denke du suchst hier nach der (MY)SQL Funktion in().

Die kannst du recht schön direkt aus Arrays befüllen und sparst dir damit einen Generator mit Schleife.

Gruß
tconex
 
Where id % 2 = 0
 
... oder ein (temporärer) Import (in einen in Memory Recordset / in Memory Table / TempTable) und dann via Inner Join einschränken. Kann unter Umständen sogar performanter sein als IN() zu verwenden, da sich die dabei verwendeten Indizes vom System entsprechend besser optimieren lassen.
 
@Serious_Sam
Was soll das denn bringen? Er will bestimmte IDs selektieren, nicht alle geraden IDs.

@ayngush
Dann hätte er aber 500 Joins, oder? Ist das echt performanter? Für einen offensichtlichen Anfänger ist es auf jeden Fall komplizierter umzusetzen als ein in().
 
Exterior schrieb:
Dann hätte er aber 500 Joins, oder? Ist das echt performanter? Für einen offensichtlichen Anfänger ist es auf jeden Fall komplizierter umzusetzen als ein in().
Ich denke mal, er meint import der IDs in temp table und dann diese mit "personen" joinen. Macht dann Sinn, wenn die ids mehrfach verwendet werden sollen.
 
es macht das ganze vor allem übersichtlicher wenn man damit mehrere operationen vorhat.

ein select * from table1 where id in (select id from temp_table);
ist halt vielfach einfacher zu überschauen als die 500 Ids in der In-Clause.
 
AHH.... doch nicht mit per Unterabfrage bitte.

Datenimport der zu verwendenden IDs in eine (temporäre) Tabelle
Index erzeugen
und dann auf diese Weise einschränken:

SELECT * FROM table1 INNER JOIN tempTable1 ON table1.ID = tempTable1.ID

Das wird man genau dann machen wollen, wenn der Umfang der Daten in der Tabelle "table1" eine gewisse Größenordnung (ein paar Millionen Tupel) überschritten hat und man ansonsten "gefühlt ne Minute" auf sein Ergebnis warten darf.
 
Corto schrieb:
es macht das ganze vor allem übersichtlicher wenn man damit mehrere operationen vorhat.

ein select * from table1 where id in (select id from temp_table);
ist halt vielfach einfacher zu überschauen als die 500 Ids in der In-Clause.

This

Oder halt ein Inner join dann (vermutlich performanter, bei 500 aber total egal) ... bzw siehe ayngush ;)
 
Zurück
Oben