Sql server 使用innerjoin MSSQL 2005和VBscript从列中选择不同的用户
使用Microsoft SQL 2005和VBscript 我正在为一个网站制作一个信息部分。我有一个名为mail的表。列包括messageid、sender、receiver、body和created。Messageid、sender和receiver都是BIGINT数据类型。body列是nvarchar(max)数据类型。创建的是日期时间数据类型 对于本例,假设用户John的userid为100 我试图隔离发送John消息或接收John消息的不同用户,并按创建列的时间(或按messageid)对用户进行排序。我尝试的查询要么失败,要么多次向同一用户查询 此查询:Sql server 使用innerjoin MSSQL 2005和VBscript从列中选择不同的用户,sql-server,vbscript,asp-classic,distinct,Sql Server,Vbscript,Asp Classic,Distinct,使用Microsoft SQL 2005和VBscript 我正在为一个网站制作一个信息部分。我有一个名为mail的表。列包括messageid、sender、receiver、body和created。Messageid、sender和receiver都是BIGINT数据类型。body列是nvarchar(max)数据类型。创建的是日期时间数据类型 对于本例,假设用户John的userid为100 我试图隔离发送John消息或接收John消息的不同用户,并按创建列的时间(或按messageid
SQL = "SELECT DISTINCT otherperson FROM ("
SQL = SQL & "SELECT DISTINCT sender AS otherperson, messageid from message where message.receiver= '100' ORDER BY messageid DESC "
SQL = SQL & "UNION "
SQL = SQL & "SELECT DISTINCT receiver AS otherperson, messageid from message where message.sender= '100' ORDER BY messageid DESC ) results "
SQL = SQL & "ORDER BY messageid"
给出错误:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML
SQL = "SELECT DISTINCT otherperson, messageid FROM ("
SQL = SQL & "SELECT DISTINCT sender AS otherperson, messageid from message where message.receiver= '100' ORDER BY messageid DESC "
SQL = SQL & "UNION "
SQL = SQL & "SELECT DISTINCT receiver AS otherperson, messageid from message where message.sender= '100' ORDER BY messageid DESC ) results "
SQL = SQL & "ORDER BY messageid"
SQL = "SELECT otherperson FROM ("
SQL = SQL & "SELECT DISTINCT sender AS otherperson from message where message.receiver= '100' "
SQL = SQL & "UNION "
SQL = SQL & "SELECT DISTINCT receiver AS otherperson from message where message.sender= '100' ) results "
还提供了一个错误:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML
SQL = "SELECT DISTINCT otherperson, messageid FROM ("
SQL = SQL & "SELECT DISTINCT sender AS otherperson, messageid from message where message.receiver= '100' ORDER BY messageid DESC "
SQL = SQL & "UNION "
SQL = SQL & "SELECT DISTINCT receiver AS otherperson, messageid from message where message.sender= '100' ORDER BY messageid DESC ) results "
SQL = SQL & "ORDER BY messageid"
SQL = "SELECT otherperson FROM ("
SQL = SQL & "SELECT DISTINCT sender AS otherperson from message where message.receiver= '100' "
SQL = SQL & "UNION "
SQL = SQL & "SELECT DISTINCT receiver AS otherperson from message where message.sender= '100' ) results "
此查询确实有效,并为我提供从John接收消息和向John发送消息的不同用户,但我无法按每个不同用户的消息时间排序
您可以使用messageid(这是一个唯一的数字,递增1)或created(这是一个具有日期时间数据类型的列)
有人能帮忙吗
TIA有两个多余的括号。
以下是您的查询现在的外观:
SELECT DISTINCT otherperson
FROM
(
SELECT DISTINCT sender AS otherperson from message where (message.receiver= '100'
UNION
SELECT DISTINCT receiver AS otherperson from message where (message.sender= '100'
) results
ORDER BY messageid
只需删除(
在message.receiver
和message.sender
之前)
[编辑]删除最顶端的DISTINCT
。它是多余的。UNION
不会返回重复的值,无需执行额外的DISTINCT
如果您确实需要
DISTINCT
,您可以将orderbymessageid
替换为orderby1
-按第一列排序。我认为您需要解决的第一件事是没有messageid
字段可供排序。您只有一个字段来自通过两个SELEC创建的表T声明
此外,还有两个不需要的括号。两个括号都是这样的:
WHERE (message.
SQL = "SELECT DISTINCT otherperson, messageid FROM ("
SQL = SQL & "SELECT DISTINCT sender AS otherperson, messageid from message where message.receiver= '100' "
SQL = SQL & "UNION "
SQL = SQL & "SELECT DISTINCT receiver AS otherperson, messageid from message where message.sender= '100' ) results "
SQL = SQL & "ORDER BY messageid"
这些都是你的疑问
最后,也是这里真正的问题,您的子查询中有ORDER BY语句(ORDER BY messageid DESC
),但您不能这样做。删除这些语句,您将修复此编译器错误
删除这两条order by语句,更改order by或添加该列,并修复括号,您就可以开始了
您的最终声明应如下所示:
WHERE (message.
SQL = "SELECT DISTINCT otherperson, messageid FROM ("
SQL = SQL & "SELECT DISTINCT sender AS otherperson, messageid from message where message.receiver= '100' "
SQL = SQL & "UNION "
SQL = SQL & "SELECT DISTINCT receiver AS otherperson, messageid from message where message.sender= '100' ) results "
SQL = SQL & "ORDER BY messageid"
对不起,我已经删除了它们,我在发布时忘记了更新message@Patriotec-我更新了我的答案。根本问题是子查询中的ORDER BY语句。删除这两个语句并修复最终的ORDER BY,以便有一个字段进行排序,您将解决问题。对不起,我已经删除了它们,我在发布时忘了更新我听到了这个消息