Announcement

Collapse
No announcement yet.

(?) SQL-Abfrage in einer SQL-Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • (?) SQL-Abfrage in einer SQL-Abfrage

    Servus.

    Ich benötige Hilfe bei folgendem Problem: Es besteht die Möglichkeit innerhalb einer SQL-Abfrage eine weitere Abfrage zu tätigen.
    Pseudocode:
    Code:
    SELECT spalte, (SELECT title FROM tabelle2 WHERE argument=1)
    FROM tabelle1
    Hier die vereinfachte Taellenstruktur:
    Code:
    +----------------+    +-----------------------+
    |tb_tags         |    |tb_projects            |
    |                |    |                       |
    |tag_id|tag_title|    |project_id|project_name|
    |------+---------+    +----------+------------+
    |1     |tag 1    |    |1         |name 1      |
    |2     |tag 2    |    |2         |name 2      |
    |3     |tag 3    |    |3         |name 3      |
    |...   |...      |    |...       |...         |
    +------+---------+    +----------+------------+
    
    +-----------------+
    |tb_join          |
    |                 |
    |project_id|tag_id|
    +---------+-------+
    |1        |1      |
    |1        |2      |
    |2        |1      |
    |3        |2      |
    |3        |3      |
    |...      |...    |
    +---------+-------+
    Ich muss nun eine Abfrage machen, mir alle Namen aus tb_projects inclusive der zum Projekt zugehörigen Tags und das in 2 Spalten. Auf die Tabellen bezogen ergäbe das folgendes Ergebnis:
    Code:
    (name 1,(tag 1,tag 2))
    (name 2,(tag 1))
    (name 3,(tag 2,tag 3))
    Das Problem an der Sache ist, dass ich nicht mit inneren Verknüpfungen arbeiten kann, da ich die zum Projekt zugehörigen Tags alle mit Komma voneinander getrennt in einer Spalte benötige.
    Bei einer Abfrage mit INNER JOIN würde ich zu diesem Ergebnis kommen:
    Code:
    (name 1, tag 1)
    (name 1, tag 2)
    (name 2, tag 1)
    (name 3, tag 2)
    (name 3, tag 3)
    Ich weiß, dass ich mit CONCAT_WS(', ',string 1, string 2, ...) die Strings 'zusammenketten' kann. Aber das hilft mir nicht weiter.
    Kann man (wie bei CONCAT_WS) das Ergebnis der inneren Abfrage in eine Spalte zwängen, nach folgender Idee?
    ACHTUNG PSEUDOCODE
    Code:
    SELECT project_name, CONCAT_WS(', ',(SELECT tag_title
                                         FROM tb_join
                                         INNER JOIN tb_tags USING(tag_id)
                                         WHERE project_id = AKTUELLE_ID)
                                  )
    FROM tb_projects
    Hat jemand eine Idee bzw. kann mir sagen, wie man mein Problem richtig angeht und lösen kann?
    Vielleicht gibt es ja eine Möglichkeit direkt von SQL aus.

    Gruß Shibuya
    Ants aren't dead

  • #2
    Du suchst wohl GROUP_CONCAT()
    Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

    Comment


    • #3
      Ah, genial. Danke dir schonmal ich werde es morgen mal testen und ausprobieren.
      Ants aren't dead

      Comment

      Working...
      X