Как объединить (объединить?) Несколько таблиц? - PullRequest
0 голосов
/ 30 марта 2009

У меня три стола

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

Любые указатели приветствуются.

* 1014 БЛАГОДАРЯ *

Ответы [ 3 ]

3 голосов
/ 30 марта 2009
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
1 голос
/ 30 марта 2009
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
0 голосов
/ 30 марта 2009

Поскольку это домашняя работа, и я предполагаю, что вы используете MySQL, прочтите эту документацию по синтаксису UNION . В основном вы выполняете два (или более) запроса из одинаковых баз данных и получаете результаты в одном запросе.

Имейте в виду, что результирующие столбцы должны быть одинаковыми.

Вы также можете создавать переменные, чтобы показать, из какой таблицы вы звоните.

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

Если вы сделаете это, все профсоюзы изменят имя таблицы.

...