2013-11-25 4 views
0

Я искал решение за последние несколько часов.MySQL Рекурсивный выбор запроса с неизвестным количеством столбцов набора результатов

Вот некоторые данные, чтобы помочь объяснить эту проблему:

mysql> describe REGION_FEATURE; 
+-----------------------+------------------+------+-----+---------+----------------+ 
| Field     | Type    | Null | Key | Default | Extra   | 
+-----------------------+------------------+------+-----+---------+----------------+ 
| ID     | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| REGION_ID    | int(10) unsigned | NO | MUL | NULL |    | 
| NAME     | varchar(255)  | NO |  | NULL |    | 
| FILENAME_NOMENCLATURE | varchar(255)  | NO |  | NULL |    | 
| CONFIG_FILE_TYPE  | int(10) unsigned | NO |  | NULL |    | 
| ITERATOR_GROUP  | int(10) unsigned | NO |  | NULL |    | 
+-----------------------+------------------+------+-----+---------+----------------+ 

mysql> select * from REGION_FEATURE; 
+----+-----------+----------------+-----------------------+------------------+----------------+ 
| ID | REGION_ID | NAME   | FILENAME_NOMENCLATURE | CONFIG_FILE_TYPE | ITERATOR_GROUP | 
+----+-----------+----------------+-----------------------+------------------+----------------+ 
| 1 |   1 | MaxCpe01  | c01     |    0 |    1 | 
| 2 |   1 | MaxCpe05  | c05     |    0 |    1 | 
| 3 |   1 | PrivacyEnable | pe     |    0 |    2 | 
| 4 |   1 | PrivacyDisable | pd     |    0 |    2 | 

Мне нужно написать запрос, который будет давать результат в этом случае. Я ожидаю 4 строки, но N количество комбинаций.

строки с той же группой interator_group (I_G) не объединены. В данном примере это I_G = 1 х I_G = 2, но может быть N число I_G

I_G=1 x I_G=n x I_G=... 


MaxCpe01 | PrivacyEnable 

MaxCpe01 | PrivacyDisable 

MaxCpe05 | PrivacyEnable 

MaxCpe05 | PrivacyDisable 

Может кто-нибудь помочь?

+1

вы должны попытаться лучше разработать свои желаемые результаты, чтобы получить ответ, потому что сейчас его не ясно, что вы хотите получить на самом деле , – Elvin

+0

В приведенном выше примере мне нужно объединить комбинации имен файлов, но у меня может быть более 2 групп итераторов. В приведенном выше примере у меня есть 2, но я могу иметь 3, 4, 5 и так далее. – MoMan

+0

В приведенном выше примере мне нужно создать комбинации имен файлов путем конкатенации, но у меня может быть более 2 групп итераторов. В приведенном выше примере у меня есть 2, но я могу иметь 3, 4, 5 и так далее. MaxCPE01_PrivacyEnable, MaxCPE01_PrivacyDisable, MaxCPE05_PrivacyEnable, MaxCPE05_PrivacyDisable. Но я мог бы, MaxCPE01_PrivacyDisable_ и так далее. Я ищу результат с одной строкой без необходимости циклически перебирать таблицу несколько раз для создания этих перестановок. – MoMan

ответ

0

Вы ищете что-то вроде этого?

SELECT t1.name name1, t2.name name2 
    FROM region_feature t1 CROSS JOIN region_feature t2 
WHERE t1.iterator_group <> t2.iterator_group 
    AND t1.id < t2.id 
ORDER BY name1; 

Выход:

 
| NAME1 |   NAME2 | 
|----------|----------------| 
| MaxCpe01 | PrivacyDisable | 
| MaxCpe01 | PrivacyEnable | 
| MaxCpe05 | PrivacyDisable | 
| MaxCpe05 | PrivacyEnable | 

Вот SQLFiddle демо

+0

Да, но результат будет отображать только 2 столбца, мне нужно, чтобы он был динамичным. В приведенном выше примере мне нужно создать комбинации имен файлов путем конкатенации, но у меня может быть более 2 групп итераторов. В приведенном выше примере у меня есть 2, но я могу иметь 3, 4, 5 и так далее. MaxCPE01_PrivacyEnable, MaxCPE01_PrivacyDisable, MaxCPE05_PrivacyEnable, MaxCPE05_PrivacyDisable. Возможно, у меня есть MaxCPE01_PrivacyDisable_ и т. Д. Я ищу результат с одной строкой без необходимости циклически перебирать таблицу несколько раз, чтобы создать эти перестановки. – MoMan

Смежные вопросы