如何加入两个T-SQL语句

时间:2015-01-01 08:39:26

标签: sql-server

我有关于sql的问题,我想加入两个sql语句。

第一个

"Select * from [PhotoStatusProfile] WHERE Email IN (Select Friend1 from [Friendship] WHERE Friend2 = '" + Session["Email"].ToString() + "' AND Friend_Status =1 UNION Select Friend2 from [Friendship] WHERE Friend1 = '" + Session["Email"].ToString() + "' AND Friend_Status =1 ) UNION Select * From PhotoStatusProfile WHERE Email='" + Session["Email"] + "' order by Date desc", con);

第二个

Select * from UserData WHERE Email='"+Session["Email"]+"'

这是我尝试过的代码,但它给了我错误

"Select * from [PhotoStatusProfile] WHERE Email IN (Select Friend1 from [Friendship] WHERE Friend2 = '" + Session["Email"].ToString() + "' AND Friend_Status =1 UNION Select Friend2 from [Friendship] WHERE Friend1 = '" + Session["Email"].ToString() + "' AND Friend_Status =1 ) UNION Select * From PhotoStatusProfile WHERE Email='" + Session["Email"] + "' order by Date desc UNION Select * from UserData WHERE Email='"+Session["Email"]+"'

UserData

CREATE TABLE [dbo].[UserData] 
(
    [YourName]       VARCHAR (50)   NULL,
    [Email]          VARCHAR (50)   NOT NULL,
    [Password]       VARCHAR (50)   NULL,
    [Gender]         VARCHAR (50)   NULL,
    [Birthday]       VARCHAR (50)   NULL,
    [AboutMe]        VARCHAR (50)   NULL,
    [Country]        VARCHAR (50)   NULL,
    [ID]             NVARCHAR (50)  NOT NULL,
    [ProfilePic]     NVARCHAR (500) NULL,
    [ProfilePicPath] NVARCHAR (500) NULL,

    CONSTRAINT [PK_UserData] PRIMARY KEY CLUSTERED ([Email] ASC)
);

PhotoStatusProfile

CREATE TABLE [dbo].[PhotoStatusProfile] 
(
    [Name]       VARCHAR (50)   NULL,
    [Status]     VARCHAR (5000) NULL,
    [Photo]      NVARCHAR (500) NULL,
    [Email]      VARCHAR (50)   NULL,
    [Date]       DATETIME       NULL,
    [ID]         NVARCHAR (50)  NULL,
    [ProfilePic] NVARCHAR (500) NULL,
    [PosterID]   VARCHAR (50)   NULL
);

3 个答案:

答案 0 :(得分:0)

始终检查状态变量是否为空Sessions,ViewStates

SqlParameter para=new SqlParameter("@Email",SQLDb.Varchar,50);
if(Session["Email"]!=null)
{
para.Value=Session["Email"].ToString();
}
else
{
para.Value="";
}

然后试试这个

"Select * from [PhotoStatusProfile] WHERE Email 
IN (Select Friend1 from [Friendship] 
WHERE Friend2 = @Email
AND Friend_Status =1 UNION Select Friend2 from 
[Friendship] WHERE Friend1 = @Email
AND Friend_Status =1 ) UNION Select ColumnName From PhotoStatusProfile
WHERE Email=@Email order by Date desc", con);

使用UNION时,列名应该相等您在上次*中使用Union

始终使用SqlParameters小心SQL注入

答案 1 :(得分:0)

UNION操作有一些限制。查看来自W3Schools的以下约束:

  

请注意,UNION中的每个SELECT语句必须具有相同的列数。列还必须具有类似的数据类型。此外,每个SELECT语句中的列必须具有相同的顺序。

答案 2 :(得分:0)

在我看来,你想基于电子邮件加入并在.NET程序中创建sql字符串。如果我的假设是正确的那么它应该是这样的:

"Select * from 
(Select * from [PhotoStatusProfile] WHERE Email 
IN 
(Select Friend1 from [Friendship] WHERE Friend2 = '" + Session["Email"].ToString() + "' AND Friend_Status =1 
UNION 
Select Friend2 from [Friendship] WHERE Friend1 = '" + Session["Email"].ToString() + "' AND Friend_Status =1 ) 
UNION Select * From PhotoStatusProfile WHERE Email='" + Session["Email"] + "' ) a 
JOIN UserData b on a.Email=b.Email order by Date desc", con)