Значения, разделенные запятыми - PullRequest
2 голосов
/ 30 марта 2009

Как я могу получить этот запрос, используя MySQL?

Table1:

id : nos

1   12,13,14
2   14
3   14,12

Table2:

id : values

12   PHP
13   JAVA
14   C++

Теперь я хочу вывод, подобный этому:

1   PHP, JAVA, C++
2   C++
3   C++, PHP

Ответы [ 5 ]

9 голосов
/ 30 марта 2009

Не проверено, но должно быть что-то вроде этого:

SELECT table1.id, GROUP_CONCAT(table2.values)
FROM table1 INNER JOIN table2 ON FIND_IN_SET(table2.id, table1.nos)
GROUP BY table1.id
3 голосов
/ 30 марта 2009

Я не знаю, как добиться этого в SQL. Вместо этого вы должны иметь отношение от 1 до N для представления этих списков. Что-то вроде:

Таблица 1: (только идентификаторы)

  • 1
  • 2
  • 3

Таблица 1.1: (сопоставить идентификаторы со значениями в их списке)

  • 1, 12
  • 1, 13
  • 1, 14
  • 2, 14
  • 3, 14
  • 3, 12
1 голос
/ 30 марта 2009

Не уверен, будет ли это работать в mySQL, но в SqlServer вы можете создать функцию:

create function dbo.replaceIdsWithValues
(
    @inIds varchar(50)
)
returns varchar(50)
as
begin
    declare @ret as varchar(50)
    set @ret = @inIds
    select @ret = replace(@ret,cast(id as varchar),theValues) from t2
    return @ret
end

, а затем просто позвоните:

select id, nos, dbo.replaceIdsWithValues(nos) from t1 

что предполагает вашу структуру таблиц:

create table t1 (id int, nos varchar(50))
create table t2 (id int, theValues varchar(50))

Вы можете проверить полный пример

create table t1 (id int, nos varchar(50))
create table t2 (id int, theValues varchar(50))
insert into t1(id, nos)
select 1, '12,13,14'
union all select 2, '14'
union all select 3, '14,12'

insert into t2(id, theValues)
select 12, 'PHP'
union all select 13, 'JAVA'
union all select 14, 'C++'

select id, nos, dbo.replaceIdsWithValues(nos) from t1 
0 голосов
/ 30 марта 2009

Хотя это не совсем относится к теме (MySQL), но поможет другим найти вопрос по заголовку, на сервере MSSQL этого можно добиться, используя подсказку FOR XML и некоторые неприятные замены строк.

Я выложу код, когда найду его ...

0 голосов
/ 30 марта 2009

Предполагается, что это комментарий, но он становится длинным.

SoulMerge ответ (+1) относится к MySql, для которого этот вопрос и был задуман изначально. Пожалуйста, смотрите правки для первоначального вопроса.

Кажется, вопрос снова отредактирован для MY-SQL, но в любом случае.

Хотя вы можете добиться этого в MS SQL с помощью PATINDEX , я не уверен, что вы можете сделать это в Oracle.

Я думаю, что было бы лучше реструктурировать таблицы, как предложено jo227o-da-silva (+ 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...