2016-07-03 12 views
1

Ich habe ein Problem mit 2 Werten aus 2 verschiedenen Tabellen beim Einfügen in die dritte Tabelle.Fügen Sie 2 Werte aus zwei verschiedenen Tabellen in eine Tabelle ein

erste Tabelle ist:

  • author_id (PK)
  • author_name
  • author_email

zweite Tabelle ist:

  • category_id (PK)
  • category_name

dritte Tabelle ist:

  • post_id
  • post_category
  • post_author
  • POST_TITLE
  • POST_CONTENT
  • post_date

und ich möchte author_name aus der ersten Tabelle und category_name aus der zweiten Tabelle beim Einfügen von Daten in dritte Tabelle erhalten.

Ich habe so etwas, aber es funktioniert nicht.

INSERT INTO posts (post_category, post_author, post_title, post_content) 
    SELECT 
     category_name 
    FROM 
     categories 
    WHERE 
     category_name='python', 
    SELECT 
     author_name 
    FROM 
     authors 
    WHERE 
     author_name = 'm0jito', 
    'Lorem Ipsum', 
    'Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum ') 

Wir freuen uns auf Ihre Hilfe.

Antwort

1

Neben @ sagi-Lösung sollten Sie in der Lage sein Scalar Subqueries zu verwenden, in einem INSERT VALUES:

INSERT INTO posts (post_category, post_author, post_title, post_content) 
VALUES 
    (
    (SELECT 
     category_name 
    FROM 
     categories 
    WHERE 
     category_name='python'), 
    (SELECT 
     author_name 
    FROM 
     authors 
    WHERE 
     author_name = 'm0jito'), 
    'Lorem Ipsum', 
    'Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum ' 
) 

Dies wird fehlschlagen, wenn category_name oder author_name nicht eindeutig sind.

Btw, möchten Sie wahrscheinlich der Kategorie/Autor id anstelle des Namen, zurückzukehren, da die aktuelle SELECT haupt nicht benötigt wird. Aber ich nehme an, das war nur ein Beispiel.

+0

Dieser funktioniert auch, danke! :) – n3stis

1

Sie müssen diese Tabellen miteinander verbinden:

INSERT INTO posts (post_category, post_author, post_title, post_content) 
SELECT c.category_name,a.author_name,'Lorem Ipsum','Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum' 
FROM categories c 
CROSS JOIN authors a 
WHERE c.category_name = 'python' 
    AND a.author_name = 'm0jito' 

I CROSS JOIN verwendet, weil Sie keine Beziehungen zwischen diesen beiden Tabellen vorsah (ein wenig verdächtig), wenn es irgendeine Art von Beziehung Spalte ist, ändern es zu einem INNER JOIN und verwenden Sie die ON() Klausel.

+0

Vielen Dank für Ihre Antwort :) – n3stis

Verwandte Themen