代码之家  ›  专栏  ›  技术社区  ›  Ian G

如何连接(合并?)多个表?

  •  0
  • Ian G  · 技术社区  · 16 年前

    AUTHOR_TABLE
    -------------
    AUTHOR_ID (PK)   AUTHOR_NAME   
    1                me
    2                you 
    
    ARTICLE_AUTHOR_TABLE
    -------------
    AUTHOR_ID  ARTICLE_ID  
    1          100
    2          101
    
    
    EVENT_AUTHOR_TABLE
    ------------------------------------------
    AUTHOR_ID   EVENT_ID  
    1           200
    1           201
    

    RESULTS
    -----------------------------------------
    AUTHOR_ID AUTHOR_NAME SOURCE_TABLE ID
    1         me          article      100
    2         you         article      101
    1         me          event        200
    1         me          event        201 
    
    /* where SOURCE_TABLE would be either "EVENT" or "ARTICLE" */
    

    编辑我真的不想要这个

    RESULTS
    -----------------------------------------
    AUTHOR_ID AUTHOR_NAME EVENT_ID ARTICLE_ID
    1         me          NULL         100
    2         you         NULL         101
    1         me          200         NULL
    1         me          201         NULL
    

    欢迎指点。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Seb    16 年前
    SELECT
      at.author_id,
      at.author_name,
      'article' AS source_table,
      aat.id
    FROM
      author_table at
      JOIN article_author_table aat
        ON at.author_id = aat.author_id
    
    UNION ALL
    
    SELECT
      at.author_id,
      at.author_name,
      'event' AS source_table,
      eat.id
    FROM
      author_table at
      JOIN event_author_table eat
        ON at.author_id = eat.author_id
    
        2
  •  1
  •   Konstantin Tarkus    16 年前
    SELECT A.AUTHOR_ID, A.AUTHOR_NAME, EA.EVENT_ID, AA.ARTICLE_ID
    FROM AUTHOR_TABLE AS A
        LEFT JOIN ARTICLE_AUTHOR_TABLE AS AA ON AA.AUTHOR_ID = A.AUTHOR_ID
        LEFT JOIN EVENT_AUTHOR_TALBE AS EA ON EA.AUTHOR_ID = A.AUTHOR_ID
    
        3
  •  0
  •   Ólafur Waage    16 年前

    因为这是家庭作业,我猜你正在使用MySQL, read this documentation on the UNION syntax . 您所做的基本上是从相似的数据库执行两个(或更多)查询,并在一个查询中获得结果。

    请注意,结果列需要相同。

    您还可以创建变量来显示从哪个表调用。

    SELECT AUTHOR_ID, AUTHOR_NAME, `AUTHOR_TABLE` AS SOURCE_TABLE, ID FROM AUTHOR_TABLE
    

    您这样做将导致所有的联合,但更改表名。