我有关于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
);
答案 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)