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

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: em-pie
em-pie 20.09.2020 um 14:47:37 Uhr
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
Mitglied: CreamyCewie
CreamyCewie 20.09.2020 um 15:03:21 Uhr
Goto Top
Danke sowas hatte ich auch im kopf.doch fügt er da mit dem Insert mehrere ein?
Mitglied: em-pie
em-pie 20.09.2020 um 17:06:48 Uhr
Goto Top
Er würde das einfügen, was du auch über ein Select sehen würdest...
Mitglied: CreamyCewie
CreamyCewie 21.09.2020 um 07:42:20 Uhr
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
Mitglied: SlainteMhath
SlainteMhath 21.09.2020 um 08:48:14 Uhr
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
Mitglied: CreamyCewie
CreamyCewie 21.09.2020 aktualisiert um 09:27:55 Uhr
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
Mitglied: em-pie
em-pie 21.09.2020 um 12:50:42 Uhr
Goto Top
Moin,

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


Gruß
em-pie