Сведение таблиц SQL в одну таблицу, удобную для CSV - PullRequest
0 голосов
/ 10 августа 2011

Я беру базу данных, которая по определенным причинам должна быть представлена ​​в формате CSV-friendly.

В настоящее время существует три таблицы.Один с базовыми описаниями объекта, например:

id | date       | name
1  | 2008-10-10 | Maestro
2  | 2008-10-12 | Domo

Затем у меня есть другая таблица, содержащая типы событий и описания:

ev_id | desc   | desc2
1     | Event1 | "Something less good happened"
2     | Event2 | "Something good happened"

Наконец, третья таблица, устанавливающая связь между ними:

id | ev_id
1  | 2
2  | 1

Мне нужно объединить три, чтобы каждая строка в таблице событий создавала столбец в конечном виде вместе с исходными описаниями объектов.Если произошло событие, в соответствующую ячейку следует вставить 1, в противном случае 0 или NULL.Например:

id | date       | name    | Event1 | Event2
1  | 2008-10-10 | Maestro | 0      | 1
2  | 2008-10-12 | Domo    | 1      | 0

Возможно ли это с помощью SQL (MySQL)?

1 Ответ

0 голосов
/ 10 августа 2011
SELECT A.*,
       (CASE WHEN B.ev_id = 1 THEN 1 ELSE 0 END) EVENT_1,
       (CASE WHEN B.ev_id = 2 THEN 1 ELSE 0 END) EVENT_2,
       .........
       .........
       (CASE WHEN B.ev_id = N THEN 1 ELSE 0 END) EVENT_N,
FROM   table1 A JOIN table2 B
ON     A.id = B.id

Единственный способ сделать это в mysql - это динамически построить запрос, циклически просматривая количество событий в основной таблице событий, а затем добавляя то же количество столбцов к вышеуказанному запросу с помощью динамического sql, а затем выполнить.

SET @S = ' <construct the query> like the sample above ';
PREPARE n_StrSQL FROM @S;
EXECUTE n_StrSQL;
DEALLOCATE PREPARE n_StrSQL;

надеюсь, это поможет

...