如何使用SQL MINUS关键字

时间:2014-12-30 09:33:02

标签: mysql asp.net sql-server

我正在使用asp.net sql构建社交网络,但我在使用SQL上的MINUS Operator时遇到问题。我使用以下关键字

选择所有朋友的用户数据
Select * from [UserData]

我想减少来自该查询的以下查询

SELECT *
FROM   [Friendship]
WHERE  Friend2 = '" + Session["Email"].ToString() + "'
       AND Friend_Status = 1
UNION
SELECT *
FROM   [Friendship]
WHERE  Friend1 = '" + Session["Email"].ToString() + "'
       AND Friend_Status = 1 

我尝试过,但是当我运行它时,它会为我提供有关此查询的详细信息

Select * from [UserData]

这是我试过的代码

SELECT *
FROM   [UserData]
MINUS
SELECT *
FROM   [Friendship]
WHERE  Friend2 = '" + Session["Email"].ToString() + "'
       AND Friend_Status = 1
UNION
SELECT *
FROM   [Friendship]
WHERE  Friend1 = '" + Session["Email"].ToString() + "'
       AND Friend_Status = 1 

你能告诉我们如何使用这个MINUS OPERATOR吗?

3 个答案:

答案 0 :(得分:1)

减号是Oracle语法。 相当于MINUS的SQL服务器是EXCEPT

http://www.sqlservercentral.com/Forums/Topic289916-23-1.aspx

答案 1 :(得分:1)

Sql Server中,您可以使用Except运算符,该运算符相当于Minus

  

EXCEPT返回左输入查询中不是的不同行   通过正确的输入查询输出。

查询应该像

SELECT *
FROM   [UserData]
EXCEPT
SELECT *
FROM  (SELECT *
       FROM   [Friendship]
       WHERE  Friend2 = '" + Session["Email"].ToString() + "'
              AND Friend_Status = 1
       UNION
       SELECT *
       FROM   [Friendship]
       WHERE  Friend1 = '" + Session["Email"].ToString() + "'
              AND Friend_Status = 1) a 

注意:确保您有相同的号码。 FreindshipUserData表格中的列

答案 2 :(得分:0)

还要提到你的第三个代码示例运行没有错误,因为MINUS只是一个表别名。事实上它说:

SELECT *
FROM   [UserData] AS MINUS;

SELECT *
FROM   [Friendship]
...

MINUS不是语言关键字,因此对于查询编译器而言,它只是一个符合别名的随机字符串。

如果您没有意识到这一点,那么看到两个查询" connected"会很困惑。通过MINUS只输出两个结果集。