Sql server 使用innerjoin MSSQL 2005和VBscript从列中选择不同的用户

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

使用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,以便有一个字段进行排序,您将解决问题。对不起,我已经删除了它们,我在发布时忘了更新我听到了这个消息