PRIMARY KEY Feld bei SELECT-Abfrage erstellen

Hallo Liste,

ich würde gern mit einer Abfrage eine Datenzusammenstellung in eine neue
Tabelle schreiben. Da es in den selektierten Datensätzen kein echtes PRIMARY
KEY Feld gibt, müsste direkt mit der Abfrage erst eines erstellt werden. Ich
hatte mir vorgestellt, dass es ungefähr so gehen müsste:

CREATE TABLE `zusammenstellung` (Id INTEGER PRIMARY KEY)
SELECT COUNT(Feld1), Feld1, Feld2, ...
FROM `originaltabelle` WHERE ...;

Aber leider scheint das nicht zu funktionieren. Habt Ihr evtl. nen Tipp für
mich?
Besten Dank!

Und Grüße,
Frank
FrankImGlueck [ Sa, 05 April 2008 01:15 ] [ ID #1936118 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Andreas Kretschmer [ Sa, 05 April 2008 09:03 ] [ ID #1936119 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

Frank Glück schrieb:
> Hallo Liste,
>
> ich würde gern mit einer Abfrage eine Datenzusammenstellung in eine neue
> Tabelle schreiben. Da es in den selektierten Datensätzen kein echtes PRIMARY
> KEY Feld gibt, müsste direkt mit der Abfrage erst eines erstellt werden. Ich
> hatte mir vorgestellt, dass es ungefähr so gehen müsste:
>
> CREATE TABLE `zusammenstellung` (Id INTEGER PRIMARY KEY)
> SELECT COUNT(Feld1), Feld1, Feld2, ...
> FROM `originaltabelle` WHERE ...;
>
> Aber leider scheint das nicht zu funktionieren. Habt Ihr evtl. nen Tipp für
> mich?
> Besten Dank!
>
> Und Grüße,
> Frank

Wenn ich mir Dein Select anschaue, würde ich sagen, das kann so nicht
laufen: Count(xxx) und weitere Felder ohne "group by" klappt nicht.

Auf der anderen Seite würde ich sagen, dass ein count() nicht geeignet
ist unique Werte zu liefern (wer garantiert dir, dass nicht 2
Werte(kombinationen gleich oft vorkommen).

Zuerst würde ich versuchen, den Select so zu schreiben, dass er läuft,
dann solltest Du Dir noch übetrlegen, wie Du die neue Spalte unique
bekommst ...

Gruß,
Michael
newsgroup [ Sa, 05 April 2008 09:58 ] [ ID #1936120 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

"Andreas Kretschmer" <akretschmer [at] spamfence.net> schrieb
> begin "Frank Glück" wrote:
>> Hallo Liste,
>
>> ich würde gern mit einer Abfrage eine Datenzusammenstellung in eine neue
>> Tabelle schreiben. Da es in den selektierten Datensätzen kein echtes
>> PRIMARY
>> KEY Feld gibt, müsste direkt mit der Abfrage erst eines erstellt werden.
>> Ich
>> hatte mir vorgestellt, dass es ungefähr so gehen müsste:
>
>> CREATE TABLE `zusammenstellung` (Id INTEGER PRIMARY KEY)
>> SELECT COUNT(Feld1), Feld1, Feld2, ...
>> FROM `originaltabelle` WHERE ...;
>
>> Aber leider scheint das nicht zu funktionieren. Habt Ihr evtl. nen Tipp
>> für
>> mich?
>> Besten Dank!
>
> Ja. Du erstellt die Tabelle via CREATE TABLE und füllst diese dann via
> SELECT. Das war jetzt einfach, oder?

Tja, wenns anders nicht geht ... Aber irgendwie hatte ich ja gehofft, dass
es eben auch eleganter in einer einzigen Abfrage möglich wäre. Schließlich
geht das ja auch mit der obigen Syntax, wenn man die zusätzliche Spalte eben
nicht bräuchte ...
FrankImGlueck [ Sa, 05 April 2008 10:02 ] [ ID #1936121 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

"Michael König" <newsgroup [at] ms-koenig.de> schrieb
> Frank Glück schrieb:
>> Hallo Liste,
>>
>> ich würde gern mit einer Abfrage eine Datenzusammenstellung in eine neue
>> Tabelle schreiben. Da es in den selektierten Datensätzen kein echtes
>> PRIMARY KEY Feld gibt, müsste direkt mit der Abfrage erst eines erstellt
>> werden. Ich hatte mir vorgestellt, dass es ungefähr so gehen müsste:
>>
>> CREATE TABLE `zusammenstellung` (Id INTEGER PRIMARY KEY)
>> SELECT COUNT(Feld1), Feld1, Feld2, ...
>> FROM `originaltabelle` WHERE ...;
>>
>> Aber leider scheint das nicht zu funktionieren. Habt Ihr evtl. nen Tipp
>> für mich?
>> Besten Dank!
>>
>> Und Grüße,
>> Frank
>
> Wenn ich mir Dein Select anschaue, würde ich sagen, das kann so nicht
> laufen: Count(xxx) und weitere Felder ohne "group by" klappt nicht.
>
> Auf der anderen Seite würde ich sagen, dass ein count() nicht geeignet
> ist unique Werte zu liefern (wer garantiert dir, dass nicht 2
> Werte(kombinationen gleich oft vorkommen).
>
> Zuerst würde ich versuchen, den Select so zu schreiben, dass er läuft,
> dann solltest Du Dir noch übetrlegen, wie Du die neue Spalte unique
> bekommst ...

Ja, diese Reihenfolge habe ich bei meinen Tests natürlich auch eingehalten,
aber schon im ersten Punkt scheitere ich ja leider. Hättest Du vielleicht
ein Beispiel für mich, wie ich dann auf andere Weise eine unique Spalte aus
dem Nichts kreieren könnte? Irgendwie unter Verwendung von AUTO_INCREMENT?
FrankImGlueck [ Sa, 05 April 2008 10:07 ] [ ID #1936122 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

"Frank Glück" <FrankImGlueck [at] gmx.de> schrieb
> Hallo Liste,
>
> ich würde gern mit einer Abfrage eine Datenzusammenstellung in eine neue
> Tabelle schreiben. Da es in den selektierten Datensätzen kein echtes
> PRIMARY KEY Feld gibt, müsste direkt mit der Abfrage erst eines erstellt
> werden. Ich hatte mir vorgestellt, dass es ungefähr so gehen müsste:
>
> CREATE TABLE `zusammenstellung` (Id INTEGER PRIMARY KEY)
> SELECT COUNT(Feld1), Feld1, Feld2, ...
> FROM `originaltabelle` WHERE ...;
>

Mal bitte nicht durch das "Count(Feld1)" verwirren lassen. Hab diese
Funktion hier völlig falsch verwendet, wie ich leider selbst erst durch
Michaels Hinweis festgestellt habe. An dieser Stelle sollte irgendwie ein
Feld mit einem fortlaufenden Zähler eingebaut werden. Aber wie krieg ich das
hin?
FrankImGlueck [ Sa, 05 April 2008 11:36 ] [ ID #1936123 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

"Frank Glück" <FrankImGlueck [at] gmx.de> schrieb
> "Frank Glück" <FrankImGlueck [at] gmx.de> schrieb
>> Hallo Liste,
>>
>> ich würde gern mit einer Abfrage eine Datenzusammenstellung in eine neue
>> Tabelle schreiben. Da es in den selektierten Datensätzen kein echtes
>> PRIMARY KEY Feld gibt, müsste direkt mit der Abfrage erst eines erstellt
>> werden. Ich hatte mir vorgestellt, dass es ungefähr so gehen müsste:
>>
>> CREATE TABLE `zusammenstellung` (Id INTEGER PRIMARY KEY)
>> SELECT COUNT(Feld1), Feld1, Feld2, ...
>> FROM `originaltabelle` WHERE ...;
>>
>
> Mal bitte nicht durch das "Count(Feld1)" verwirren lassen. Hab diese
> Funktion hier völlig falsch verwendet, wie ich leider selbst erst durch
> Michaels Hinweis festgestellt habe. An dieser Stelle sollte irgendwie ein
> Feld mit einem fortlaufenden Zähler eingebaut werden. Aber wie krieg ich
> das hin?

Falls es jemanden interessiert - durch Kombination einer selbstvergebenen
Variablen mit einem Subselect habe ich es hinbekommen:

CREATE TABLE `zusammenstellung`
SELECT [at] zaehler:= [at] zaehler+1 AS Id, Feld1, Feld2, ...
FROM (SELECT [at] zaehler:=0) AS z, `originaltabelle` WHERE ...;

Danke und Grüße,
Frank
FrankImGlueck [ Sa, 05 April 2008 12:55 ] [ ID #1936124 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

Frank Glück schrieb:
[...]
>> Mal bitte nicht durch das "Count(Feld1)" verwirren lassen. Hab diese
>> Funktion hier völlig falsch verwendet, wie ich leider selbst erst durch
>> Michaels Hinweis festgestellt habe. An dieser Stelle sollte irgendwie ein
>> Feld mit einem fortlaufenden Zähler eingebaut werden. Aber wie krieg ich
>> das hin?
>
> Falls es jemanden interessiert - durch Kombination einer selbstvergebenen
> Variablen mit einem Subselect habe ich es hinbekommen:
>
> CREATE TABLE `zusammenstellung`
> SELECT [at] zaehler:= [at] zaehler+1 AS Id, Feld1, Feld2, ...
> FROM (SELECT [at] zaehler:=0) AS z, `originaltabelle` WHERE ...;

Wenn man einen NULL-Wert in eine Auto-Increment-Spalte einfügt wird auch
hochgezählt...

Stefan
Weinzierl Stefan [ Sa, 05 April 2008 19:08 ] [ ID #1936125 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

Frank Glück schrieb:

> Ja, diese Reihenfolge habe ich bei meinen Tests natürlich auch eingehalten,
> aber schon im ersten Punkt scheitere ich ja leider. Hättest Du vielleicht
> ein Beispiel für mich, wie ich dann auf andere Weise eine unique Spalte aus
> dem Nichts kreieren könnte? Irgendwie unter Verwendung von AUTO_INCREMENT?

CREATE TABLE ... SELECT ...;
ALTER TABLE ... ADD COLUMN ... (INT UNSIGNED UNIQUE AUTO_INCREMENT NOT
NULL);

sollte helfen - aber leider nicht in einem Rutsch...



Thomas
Thomas Rachel [ Mo, 07 April 2008 13:25 ] [ ID #1937040 ]

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

Weinzierl Stefan wrote:
> Frank Glück schrieb:
> [...]
>
>>> Mal bitte nicht durch das "Count(Feld1)" verwirren lassen. Hab diese
>>> Funktion hier völlig falsch verwendet, wie ich leider selbst erst
>>> durch Michaels Hinweis festgestellt habe. An dieser Stelle sollte
>>> irgendwie ein Feld mit einem fortlaufenden Zähler eingebaut werden.
>>> Aber wie krieg ich das hin?
>>
>>
>> Falls es jemanden interessiert - durch Kombination einer
>> selbstvergebenen Variablen mit einem Subselect habe ich es hinbekommen:
>>
>> CREATE TABLE `zusammenstellung`
>> SELECT [at] zaehler:= [at] zaehler+1 AS Id, Feld1, Feld2, ...
>> FROM (SELECT [at] zaehler:=0) AS z, `originaltabelle` WHERE ...;
>
>
> Wenn man einen NULL-Wert in eine Auto-Increment-Spalte einfügt wird auch
> hochgezählt...

Aber dann geht das ganze ja nicht mehr in einem Rutsch. D.h. ich muss
zuerst die Tabelle mit pkey erzeugen und dann erst befüllen.
Stefan Dreyer [ Di, 08 April 2008 15:07 ] [ ID #1937882 ]
Datenbanken » de.comp.datenbanken.mysql » PRIMARY KEY Feld bei SELECT-Abfrage erstellen

Vorheriges Thema: Re: Entwicklung eines Datenmodells fürCRM
Nächstes Thema: SHOW MUTEX STATUS