【问题标题】:How to use the SQL MINUS keyword如何使用 SQL MINUS 关键字
【发布时间】:2015-02-26 11:08:17
【问题描述】:

我正在使用 asp.net sql 构建社交网络,但在 SQL 上使用 MINUS 运算符时遇到问题。我使用以下关键字选择所有朋友的用户数据

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 吗?

【问题讨论】:

标签: mysql asp.net sql-server


【解决方案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 表中的列

【讨论】:

  • 谢谢,但它给了我错误在执行当前 Web 请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
  • @SoftwaresAŋɖTricks 这个错误不是因为Sql代码。可能来自应用程序
  • 我可以在不使用 EXCEPT 的情况下使用 NOT IN
  • @SoftwaresAŋɖTricks 是的,但是你需要在这两个表之间有一个公共列
  • 你为什么要添加另一个 Select * FROM 状态??
【解决方案2】:

减号是 Oracle 语法。 SQL server 相当于 MINUS 是 EXCEPT

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

【讨论】:

    【解决方案3】:

    还值得一提的是,您的第三个代码示例运行时没有错误,因为MINUS 只不过是那里的表别名。事实上它说:

    SELECT *
    FROM   [UserData] AS MINUS;
    
    SELECT *
    FROM   [Friendship]
    ...
    

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

    如果您没有意识到这一点,如果看到两个查询被 MINUS“连接”,只是输出两个结果集,可能会非常令人困惑。

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2010-10-02
      相关资源
      最近更新 更多