需要Sql查询连接三个表的帮助吗
我有三个表格,如下表所示需要Sql查询连接三个表的帮助吗,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有三个表格,如下表所示 create table Information(InfoID int, TOEmailIDKey varchar(100), CCEmailIDKey varchar(100)) create table userdata(UserKey int, name varchar(50), EmailIDs varchar(100)) create table emailusers(EmailUserKey int, username varchar(100
create table Information(InfoID int, TOEmailIDKey varchar(100),
CCEmailIDKey varchar(100))
create table userdata(UserKey int, name varchar(50), EmailIDs varchar(100))
create table emailusers(EmailUserKey int, username varchar(100),
UsersMailIDs varchar(100))
insert into Information select 1,'100,101,102','201,202,203'
insert into userdata
select 201,'test','Test@test.com' union
select 202,'test2','Test2@test.com' UNION
select 203,'test3','Test3@test.com'
insert into emailusers
select 100,'sample','sample@test.com' union
select 101,'sample2','sample2@test.com' union
select 102,'sample3','sample3@test.com'
select * from Information
select * from userdata
select * from emailusers
从以上三个表中,我希望输出如下
TOMails(column1)
sample@test.com,sample2@test.com,
sample3@test.com
CCEmail (colum2)
Test.@test.com,Test2@test.com,Test3@test.com
创建如下函数:
CREATE FUNCTION dbo.splitstring (@stringToSplit varchar(MAX))
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name nvarchar(255)
DECLARE @pos INT
WHILE CHARINDEX (',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX (',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
GO
然后您可以执行以下操作:
DECLARE @string varchar(50)
DECLARE @tmp VARCHAR(250)
SET @string = (SELECT CCEmailIDKey FROM Information)
SET @tmp = ''
SELECT @tmp = @tmp + EmailIDs + ', '
FROM
(
SELECT
u.EmailIDs
FROM
userdata u
JOIN dbo.splitstring(@string) s ON u.UserKey = s.name
) s
SELECT SUBSTRING(@tmp, 0, LEN(@tmp))
GO
DECLARE @string varchar(50)
DECLARE @tmp VARCHAR(250)
SET @string = (SELECT TOEmailIDKey FROM Information)
SET @tmp = ''
SELECT @tmp = @tmp + UsersMailIDs + ', '
FROM
(
SELECT
u.UsersMailIDs
FROM
emailusers u
JOIN dbo.splitstring(@string) s ON u.EmailUserKey = s.name
) s
SELECT SUBSTRING(@tmp, 0, LEN(@tmp))
GO
无论您的数据如何更改,什么都能提供您想要的结果
结合这两个答案:
您的桌子设计需要更改。为什么在信息表中有三个逗号分隔的pk?我同意Borat,这不是一个建设性的表设计。然而,为了得到想要的结果,您的实际代码如何?我们可以不改变表模式而获得输出吗?目前我只有3个电子邮件id,以后我可能有n个列,如何使其工作您将不得不添加更多的
子字符串
。正如其他人提到的,在表设计中,这确实不是一个好方法。