T-SQL相当于其他表中的MySQL
我正在努力在SQLServer中做一些在MySQL中非常简单的事情 我想从一个表中获取一些列(为了简单起见,我们只说一列),然后根据第一个表中的键计算另一个表中的其他列,并在结果集中包含这两个值 以下查询在MySQL中可用,但在SQL Server中不可用:T-SQL相当于其他表中的MySQL,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在努力在SQLServer中做一些在MySQL中非常简单的事情 我想从一个表中获取一些列(为了简单起见,我们只说一列),然后根据第一个表中的键计算另一个表中的其他列,并在结果集中包含这两个值 以下查询在MySQL中可用,但在SQL Server中不可用: SELECT ph.PONum, COUNT(pd.POLine) AS LineCount FROM POHeader AS ph INNER JOIN PODetail AS pd ON ph.P
SELECT
ph.PONum,
COUNT(pd.POLine) AS LineCount
FROM
POHeader AS ph
INNER JOIN
PODetail AS pd ON ph.POnum = pd.PONum
WHERE
ph.PONum = 4444
结果:
SQL Server(T-SQL)是如何做到这一点的?与MySQL不同,SQL Server不假定您要按哪些列进行分组。每个未聚合的列都需要在
分组依据
列表中定义
对于您的查询,它应该是:
SELECT
ph.PONum,
COUNT(pd.POLine) AS LineCount
FROM
[Dbo].POHeader AS ph
INNER JOIN
[Dbo].PODetail AS pd ON ph.POnum = pd.PONum
WHERE
ph.PONum = 4444
GROUP BY
ph.PONum
与MySQL不同,SQL Server不假定您要按哪些列进行分组。每个未聚合的列都需要在
分组依据
列表中定义
对于您的查询,它应该是:
SELECT
ph.PONum,
COUNT(pd.POLine) AS LineCount
FROM
[Dbo].POHeader AS ph
INNER JOIN
[Dbo].PODetail AS pd ON ph.POnum = pd.PONum
WHERE
ph.PONum = 4444
GROUP BY
ph.PONum
还可以使用相关子查询。乙二醇
SELECT
ph.PONum,
( select COUNT(*) from PODetail where PONum = ph.POnum ) LineCount
FROM
POHeader ph
WHERE
ph.PONum = 4444
还可以使用相关子查询。乙二醇
SELECT
ph.PONum,
( select COUNT(*) from PODetail where PONum = ph.POnum ) LineCount
FROM
POHeader ph
WHERE
ph.PONum = 4444
MySQL没有使用
[table\u name]
符号。是的,我知道,但这不是这个问题的重点。啊,我读它的时候你正试图在MySQL方面使用它。MySQL没有使用[table\u name]
符号。是的,我知道,但这不是这个问题的重点。啊,我是在你试图在MySQL端使用它的时候读到的,所以如果我有20个字段,我就必须按字段1、字段2、字段3分组,等等?哇,是的。@S.Mason这是SQL标准。MySQL在某些方面偏离了SQL标准。。除非您使用的是SET SESSION sql\u mode=CONCAT(@@sql\u mode',,否则只能使用“full\u group\u by”)
那么MySQL在GROUPBY上遵循SQL标准,所以如果我有20个字段,我就必须按字段1、字段2、字段3进行分组,等等?哇,是的。@S.Mason这是SQL标准。MySQL在某些方面偏离了SQL标准。。除非您使用的是SET SESSION sql\u mode=CONCAT(@@sql\u mode',,否则只能使用“full\u group\u by”)代码>然后MySQL在组中遵循SQL标准,你是说一个相关子查询你在技术上是正确的-最好的一种正确。你是说一个相关子查询你在技术上是正确的-最好的一种正确。