PRIMARY KEY Feld bei SELECT-Abfrage erstellen

PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 01:15:55 von FrankImGlueck

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

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 09:03:18 von Andreas Kretschmer

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)

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 09:58:34 von newsgroup

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

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 10:02:59 von FrankImGlueck

"Andreas Kretschmer" 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 ...

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 10:07:32 von FrankImGlueck

"Michael König" 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?

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 11:36:02 von FrankImGlueck

"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 ...;
>

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?

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 12:55:42 von FrankImGlueck

"Frank Glück" 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 ...;
>>
>
> 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 @zaehler:=@zaehler+1 AS Id, Feld1, Feld2, ...
FROM (SELECT @zaehler:=0) AS z, `originaltabelle` WHERE ...;

Danke und Grüße,
Frank

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 05.04.2008 19:08:32 von Weinzierl Stefan

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 @zaehler:=@zaehler+1 AS Id, Feld1, Feld2, ...
> FROM (SELECT @zaehler:=0) AS z, `originaltabelle` WHERE ...;

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

Stefan

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 07.04.2008 13:25:19 von Thomas Rachel

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

Re: PRIMARY KEY Feld bei SELECT-Abfrage erstellen

am 08.04.2008 15:07:53 von Stefan Dreyer

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 @zaehler:=@zaehler+1 AS Id, Feld1, Feld2, ...
>> FROM (SELECT @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.