Update-Anweisung in Access
Hallo,
Ich programmiere Game of Life mit Access.
Zellen, die sterben sollen stehen in der Query "die".
Nun muß ich in meiner Tabelle "zelle" den Zustand jener Zellen , die sterben sollen, auf "tot" setzen.
x,y sind Koordinaten der Zellen in "die" und in "zelle".
UPDATE zelle SET zelle.zustand = "tot"
WHERE zelle.x,zelle.y EXISTS (SELECT * FROM zelle AS z INNER JOIN die AS d ON (z.x=d.x AND z.y=d.y))
so oder ähnlich wird intuitiv die Anfrage lauten.
danke schon mal für eure Hilfe
Ich programmiere Game of Life mit Access.
Zellen, die sterben sollen stehen in der Query "die".
Nun muß ich in meiner Tabelle "zelle" den Zustand jener Zellen , die sterben sollen, auf "tot" setzen.
x,y sind Koordinaten der Zellen in "die" und in "zelle".
UPDATE zelle SET zelle.zustand = "tot"
WHERE zelle.x,zelle.y EXISTS (SELECT * FROM zelle AS z INNER JOIN die AS d ON (z.x=d.x AND z.y=d.y))
so oder ähnlich wird intuitiv die Anfrage lauten.
danke schon mal für eure Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97990
Url: https://administrator.de/forum/update-anweisung-in-access-97990.html
Ausgedruckt am: 22.04.2025 um 16:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo,
und, was sagt er zu deinem "intuitiven" Ansatz?
Über die SQL-Fähigkeiten von Access bin ich mir ja nie ganz im klaren, aber in T-SQL (MS SQL Server) gäbe es wohl zwei Ansätze:
1. WHERE ... IN. Wie sieht's bei dir denn mit Primärschlüsseln aus? Die kann man eigentlich gut zusammensetzen (also x und y bilden den Schlüssel der Tabelle zelle), bei diesem Ansatz brauchst du aber einen einattributigen. Dann geht: UPDATE zelle SET... WHERE zelle.zelle_ID in (SELECT zelle.zelle_ID FROM zelle INNER JOIN die ON...)
2. Deutlich eleganter: Du kannst JOINS auch direkt in das Update-Statement einbauen. Grob: UPDATE zelle SET ... FROM zelle INNER JOIN die ON ... Zugegeben: ich muss die Ansätze auch immer erstmal ausprobieren, um zu sehen, ob sie funktionieren. Sollte es obiges (wider Erwarten) nicht tun würde ich ein UPDATE zelle SET ... FROM zelle LEFT JOIN die ON ...WHERE NOT die.x IS NULL probieren.
Gruß
Filipp
und, was sagt er zu deinem "intuitiven" Ansatz?
Über die SQL-Fähigkeiten von Access bin ich mir ja nie ganz im klaren, aber in T-SQL (MS SQL Server) gäbe es wohl zwei Ansätze:
1. WHERE ... IN. Wie sieht's bei dir denn mit Primärschlüsseln aus? Die kann man eigentlich gut zusammensetzen (also x und y bilden den Schlüssel der Tabelle zelle), bei diesem Ansatz brauchst du aber einen einattributigen. Dann geht: UPDATE zelle SET... WHERE zelle.zelle_ID in (SELECT zelle.zelle_ID FROM zelle INNER JOIN die ON...)
2. Deutlich eleganter: Du kannst JOINS auch direkt in das Update-Statement einbauen. Grob: UPDATE zelle SET ... FROM zelle INNER JOIN die ON ... Zugegeben: ich muss die Ansätze auch immer erstmal ausprobieren, um zu sehen, ob sie funktionieren. Sollte es obiges (wider Erwarten) nicht tun würde ich ein UPDATE zelle SET ... FROM zelle LEFT JOIN die ON ...WHERE NOT die.x IS NULL probieren.
Gruß
Filipp
Moin cranach/Ebru,
willkommen im Forum.
Wir können es handwerklich doch nur dann lösen, wenn wir alle erforderlichen Rahmenbedingungen Deiner Game-of-Life-Implementierung kennen.
Insbesondere fehlt mir die folgende Info:
Du hast nach einer Möglichkeit gefragt, alle vorhandenen Zellen auf Deinem Spielfeld (=komplette Tabelle "Zelle") per Update des Felds "Zustand" zu aktualisieren - allerdings nur auf den Zustand "tot". Was sind denn die anderen möglichen Zustände? Bzw. wäre es nicht einfacher, statt "UPDATE" ein DELETE From" zu nehmen?
Es sei denn, Du hast es ganz anders implementiert...
Skizziere doch bitte kurz den Gesamtalgorithmus.
Danke
Biber
willkommen im Forum.
Wir können es handwerklich doch nur dann lösen, wenn wir alle erforderlichen Rahmenbedingungen Deiner Game-of-Life-Implementierung kennen.
Insbesondere fehlt mir die folgende Info:
Du hast nach einer Möglichkeit gefragt, alle vorhandenen Zellen auf Deinem Spielfeld (=komplette Tabelle "Zelle") per Update des Felds "Zustand" zu aktualisieren - allerdings nur auf den Zustand "tot". Was sind denn die anderen möglichen Zustände? Bzw. wäre es nicht einfacher, statt "UPDATE" ein DELETE From" zu nehmen?
müßte UPDATE und INSERT gleichzeitig laufen lassen, damit keiner von beiden früher zum Zuge kommt
Kann ich nicht nachvollziehen. Egal, ob Du es über eine Sequenz "DELETE died", danach "insert born" oder zuerst insert, dann delete machen würdest- NIEMALS kann eine Zelle(x,y) gleichzeitig/in der gleichen Generation in beiden Untermengen enthalten sein.Es sei denn, Du hast es ganz anders implementiert...
Skizziere doch bitte kurz den Gesamtalgorithmus.
Danke
Biber