creamycewie
Goto Top

Insert Statement mit Werten aus anderer Tabelle

Hi Leute.

Ich habe eine Frage bzgl meines tSQL Problems.

Ich habe zwei Tabellen die wie folgt aussehen.

Tabelle Artikel
ArtNr Text
100 Artikel 1

Tabelle Size
ArtNr Size
100 40
100 42

Ich möchte nun mit einem Makro folgendes erreichen:

In der Tabelle Artikel sollen neue Datensätze angelegt werden. bleiben wir beim Demo Datensatz .

Die neuen Datensätze sollen wir folgt aussehen:

1. DS Artikel.ArtNr = 100_40, Artikel.text = Artikel 1 Größe 40
2. DS Artikel.ArtNr = 100_42, Artikel.text = Artikel 1 Größe 42

Ich will also dass du es Werte des neuen Artikels aus denen des Hauotartikels plus den Werten aus der Größentabelle bestehen.

Ich könnte das ganze mittels einem Join machen, wo ich die werte aus der Größentabelle hole. Nur will ich, dass das Script so oft durchläuft wie es passende Datensätze in der Größentabelle gibt.
In diesem Fall also 2x. Wenn da aber 10 DS mit der ArtNr 100 in der Größentabelle gibt, soll es mir 10 DS anlegen.

Habt ihr da eine Idee dazu?

Content-Key: 606468

Url: https://administrator.de/contentid/606468

Printed on: April 19, 2024 at 00:04 o'clock

Member: em-pie
em-pie Sep 20, 2020 at 12:47:37 (UTC)
Goto Top
Moin,

Das Thema mit dem JOIN ist genau das, was du brauchst.

Baue dir das zunächst mal mit einem
 
SELECT
 artikel.*
 , size.* 
 , CONCAT(artikel.ARTIKEL, '_', size.SIZE) as artikelSize  
FROM 
 ARTIKEL
INNER JOIN SIZE
 on Artikel.ARTIKEL = size.ARTIKEL
zusammen

Danach kannst du das auf ein INSERT INTO adaptieren


Gruß
em-pie
Member: CreamyCewie
CreamyCewie Sep 20, 2020 at 13:03:21 (UTC)
Goto Top
Danke sowas hatte ich auch im kopf.doch fügt er da mit dem Insert mehrere ein?
Member: em-pie
em-pie Sep 20, 2020 at 15:06:48 (UTC)
Goto Top
Er würde das einfügen, was du auch über ein Select sehen würdest...
Member: CreamyCewie
CreamyCewie Sep 21, 2020 at 05:42:20 (UTC)
Goto Top
Scheint leider nicht so zu gehen.

Wenn ich meine Abfrage entsprechend aufbaue:
insert into artikel (Artikelnummer)
values ( (select concat (:artNr,'_',_SIZE) from xSizeValues where _HAUPTDS = :SizeTable) )  

erhalte ich den folgenden Fehler:

Die Unterabfrage hat mehr als einen Wert zurückgegeben

wenn ich nur das select-statement ausführe, also
select concat (:artNr,'_',_SIZE) from xSizeValues where _HAUPTDS = :SizeTable  
dann bekomme ich die korrekt zusammengesetzten Werte
Member: SlainteMhath
SlainteMhath Sep 21, 2020 at 06:48:14 (UTC)
Goto Top
Moin,

der korrekte Syntax lautet
INSERT INTO tabelle
  SELECT ... FROM ... JOIN usw
Guckst du hier: https://docs.microsoft.com/en-us/sql/t-sql/statements/insert-transact-sq ...

lg,
Slainte
Member: CreamyCewie
CreamyCewie Sep 21, 2020 updated at 07:27:55 (UTC)
Goto Top
Ich glaube ich bin zu blöd dafür.

Hier nochmal die exakte Tabellenstruktur die ich habe

Tabelle "ART"
Artikelnummer Bezeichnung _SIZETABLE
10000 Herrenhose 1

Tabelle "XSIZES"
_ID _BEZEICHNUNG
1 Hosen

Tabelle "XSIZEVALUES"
_HAUPTDS _SIZE
1 40
1 42
1 43

Verknüpft sind die Tabellen folgend:

ART._SIZETABLE = XSIZES._ID = XSIZEVALUES = _HAUPTDS

Ich möchte mit meinem Script nun, dass in der Tabelle "ART" soviele neue DS eingefügt werden, wie in der Tabelle "XSIZEVALUES" mit der entsprechenden ID enthalten sind.
Die Tabelle "XSIZES" entspricht somit einer "Zwischentabelle"

Leider stehe ich hier mit dem Aufbau der JOINS an.

müsste doch eigentlich wie folgt aussehen, oder?

select 
* 
from ART a 
where a.Artikelnummer = :ArtNr
inner join XSIZES s on a._SIZETABLE = s._ID 
inner join XSIZEVALUES v on s._ID = v._HAUPTDS

leider bekomme ich hier den folgenden Syntax-Error:
"Falsche Syntax in der Nähe des inner-Schlüsselworts, Zeile 6"

:ArtNr ist mein Parameter, mit dem ich die Artikelnummer des Ursprungs-Artikels (hier 10000) übergebe.

Wenn ich den zweiten Join (auf die XSIZEVALUES) rausnehme, kriege ich den gleichen Fehler.

Wo bin ich hier falsch?

Danke für die Hilfestellung bisher!
LG CreamyCewie
Member: em-pie
em-pie Sep 21, 2020 at 10:50:42 (UTC)
Goto Top
Moin,

Du musst erst die JOINs erstellen und dann die Where-Bedingung anhängen.


Gruß
em-pie