2017-09-11 1 views
0

War nicht sicher, wie Sie die Frage schreiben sollten.So fügen Sie Daten aus zwei Abfragen in die Beziehungstabelle ein

Ich habe diese drei Tabellen:

PICTURES 
id 
name 

MATERIALS 
id 
name 

PICTURES_MATERIALS 
picture_id 
material_id 

Ich habe Tausende von Bildern und 5 Materialien und die meisten Bilder haben alle Materialien. Mit dieser Abfrage habe ich herausgefunden, dass etwa 100 Bilder kein Material haben.

select p.id, p.name 
from pictures as p 
left outer join pictures_materials as pm on p.id = pm.picture_id 
where pm.picture_id is null; 

Was würde ich jetzt tun möchte, ist in pictures_materials für jedes dieser Bilder mit jedem Material eine Zeile einzufügen. So lassen Sie uns sagen, dass diese einige der Bilder ohne Materialien sind:

picture_21, picture_22, picture_23 

Ich möchte haben:

picture_21 material_1 
picture_21 material_2 
picture_21 material_3 
picture_21 material_4 
... 

Ist es möglich, diese in einer einzigen INSERT INTO-Abfrage zu tun?

Antwort

1

Ist es möglich, dies in einer einzigen INSERT INTO-Abfrage zu tun?

Ja!

Sie haben einen legitimen Grund gefunden, ein kartesisches Produkt zu erstellen. Um dies zu tun, verwenden Sie eine CROSS JOIN. Versuchen Sie diese Abfrage.

Nachdem Sie überprüft haben, dass die SELECT-Anweisung die gewünschten Daten zurückgibt, entfernen Sie die Kommentarzeichen für die INSERT-Anweisung und führen sie erneut aus.

+0

danke, das ist perfekt. Aus Neugier, wofür steht 'dt'? – Carlo

+0

dt - abgeleitete Tabelle. Das könnte sein, wie sie in Sybase & SQL Server genannt werden. Oracle nennt sie Inline-Ansichten. Ich müsste nachsehen, was MySQL sie nennt. Grundsätzlich verweisen Sie die Ergebnisse einer Abfrage als Tabelle. –

+0

Ich wusste, wie das funktioniert, ich konnte einfach nicht herausfinden, wofür der Alias ​​stand – Carlo

Verwandte Themen