Sql 连接到select语句时出现问题

Sql 连接到select语句时出现问题,sql,Sql,我希望TotalAnswers和WinningAnswers显示为两个独立的列。但是,当我测试查询时,我得到一行两个数字…这无法完成,如果使用union,两个查询中的列名必须相同。尝试进行单个查询。这无法完成,如果使用union,则两个查询中的列名必须相同。尝试进行单一查询。工会就是这样做的。。。它创建两个数据集的并集 SELECT COUNT( WiningComment) AS 'WinningAnswers' FROM Threads WHERE WiningComment IN (SEL

我希望TotalAnswers和WinningAnswers显示为两个独立的列。但是,当我测试查询时,我得到一行两个数字…

这无法完成,如果使用union,两个查询中的列名必须相同。尝试进行单个查询。

这无法完成,如果使用union,则两个查询中的列名必须相同。尝试进行单一查询。

工会就是这样做的。。。它创建两个数据集的并集

SELECT COUNT( WiningComment) AS 'WinningAnswers'
FROM Threads
WHERE WiningComment IN (SELECT CommentsID
FROM Comments
WHERE  UsersID=@UserID)

UNION ALL
SELECT COUNT(CommentsID)  AS 'TotalAnswers'
FROM  Comments
WHERE  UsersID=@UserID

实际上,您有两个单独的查询,所以您可能只需要执行两个单独的查询。

这就是联合所做的。。。它创建两个数据集的并集

SELECT COUNT( WiningComment) AS 'WinningAnswers'
FROM Threads
WHERE WiningComment IN (SELECT CommentsID
FROM Comments
WHERE  UsersID=@UserID)

UNION ALL
SELECT COUNT(CommentsID)  AS 'TotalAnswers'
FROM  Comments
WHERE  UsersID=@UserID

实际上,您有两个单独的查询,因此您可能只需要执行两个单独的查询。

根据定义,
UNION
操作符将两个结果集连接起来并合并它们的行-两个结果集=至少两行

您要查找的是一个类似于单个
SELECT
,带有两个子选项以获取这些值:

(1,2,3) UNION (4,5,6) = (1,2,3,4,5,6)

根据定义,
UNION
运算符连接两个结果集并合并它们的行-两个结果集=至少两行

您要查找的是一个类似于单个
SELECT
,带有两个子选项以获取这些值:

(1,2,3) UNION (4,5,6) = (1,2,3,4,5,6)

例如,您可以进行一点分组:

SELECT (
    SELECT COUNT( WiningComment)
    FROM Threads
    WHERE WiningComment IN (SELECT CommentsID
    FROM Comments
    WHERE  UsersID=@UserID)
) as 'WinningAnswers',
(
    SELECT COUNT(CommentsID)
    FROM  Comments
    WHERE  UsersID=@UserID
) as 'TotalAnswers'
或者,考虑到第二个查询只返回一条记录,您可以简单地:

SELECT MAX(WinningAnswers) AS 'WinningAnswers', MAX(TotalAnswers) AS 'TotalAnswers'
FROM (
    SELECT t.UsersID, COUNT(t.WiningComment) AS 'WinningAnswers', 0 AS 'TotalAnswers'
    FROM Threads t
      JOIN Comments c ON c.CommentsID = t.WiningComment
    WHERE t.UsersID = @UserID
    UNION ALL
    SELECT UsersID, 0 AS 'WinningAnswers', COUNT(CommentsID) AS 'TotalAnswers'
    FROM Comments
    WHERE UsersID = @UserID
  ) AS Total
GROUP BY UsersID;

例如,您可以进行一点分组:

SELECT (
    SELECT COUNT( WiningComment)
    FROM Threads
    WHERE WiningComment IN (SELECT CommentsID
    FROM Comments
    WHERE  UsersID=@UserID)
) as 'WinningAnswers',
(
    SELECT COUNT(CommentsID)
    FROM  Comments
    WHERE  UsersID=@UserID
) as 'TotalAnswers'
或者,考虑到第二个查询只返回一条记录,您可以简单地:

SELECT MAX(WinningAnswers) AS 'WinningAnswers', MAX(TotalAnswers) AS 'TotalAnswers'
FROM (
    SELECT t.UsersID, COUNT(t.WiningComment) AS 'WinningAnswers', 0 AS 'TotalAnswers'
    FROM Threads t
      JOIN Comments c ON c.CommentsID = t.WiningComment
    WHERE t.UsersID = @UserID
    UNION ALL
    SELECT UsersID, 0 AS 'WinningAnswers', COUNT(CommentsID) AS 'TotalAnswers'
    FROM Comments
    WHERE UsersID = @UserID
  ) AS Total
GROUP BY UsersID;

是的-根据定义,
工会就是这么做的。如果你想要一行两列,你需要有一个带有两个子选择的
SELECT
。是的-这就是
联合所做的-根据定义。如果需要一行两列,则需要一个带有两个子选择的
SELECT
。。