簡體   English   中英

逗號分隔值

[英]Comma separated Values

如何使用mysql獲取此查詢?

表格1:

id : nos

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

表2:

id : values

12   PHP
13   JAVA
14   C++

現在,我想要這樣的輸出:

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

沒有測試但它應該是這樣的:

SELECT table1.id, GROUP_CONCAT(table2.values)
FROM table1 INNER JOIN table2 ON FIND_IN_SET(table2.id, table1.nos)
GROUP BY table1.id

我不知道在SQL中實現這一點。 您應該使用1到N的關系來表示這些列表。 就像是:

表1 :(只是ids)

  • 1
  • 2
  • 3

表1.1 :(將ID映射到列表中的值)

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

不確定這是否適用於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 

作為評論意圖,但它變得越來越長。

SoulMerge答案(+1)特定於MySql,這個問題是初步意圖。 請參閱初始問題的編輯。

似乎問題再次被編輯為MY-SQL,但無論如何。

雖然您可以使用PATINDEXMS SQL中實現此目的,但我不確定您是否可以在oracle中執行此操作。

我認為按照jo227o-da-silva (+1)的建議重組表格會更好。

雖然與主題(MySQL)不完全相關,但是將幫助其他人按標題查找問題,但在MSSQL服務器中,這可以使用FOR XML提示和一些討厭的字符串替換來實現。

當我發現它時,我會發布一些代碼......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM