Mysql 如何使用唯一ID创建MS SQL创建视图? 背景:

Mysql 如何使用唯一ID创建MS SQL创建视图? 背景:,mysql,sql-server,multiple-tables,create-view,Mysql,Sql Server,Multiple Tables,Create View,我第一次被要求做一个网站,使用mysql作为数据库,完成并发送后,客户要求我将其转换为mssql和3层 我编写了用于在服务器之间传输数据的类和函数,因此3层的部分大约完成了一半。我现在正在努力解决的是MsSQL 问题: 问题的MySQL版本如下所示: select a.id as a_id, a.first_name, a.last_name, a.agent_code, b.id as b_id, b.user_id, b.status_admin from tbl_user

我第一次被要求做一个网站,使用mysql作为数据库,完成并发送后,客户要求我将其转换为mssql和3层

我编写了用于在服务器之间传输数据的类和函数,因此3层的部分大约完成了一半。我现在正在努力解决的是MsSQL

问题: 问题的MySQL版本如下所示:

select a.id as a_id, a.first_name, a.last_name, a.agent_code,
       b.id as b_id, b.user_id, b.status_admin 
from tbl_user a 
  inner join tbl_testimonia b 
    on a.id = b.user_id 
where b.status_admin=0  
group by a.id
order by b.id desc
它所做的是返回尚未批准的推荐信,分组给每个用户


我被困的地方: 我无法将此转换为MSSQL

我的最佳尝试:

  • 创建视图
例如:

    create view test as
    (
    select a.id as a_id, a.first_name, a.last_name, a.agent_code,
    b.id as b_id, b.user_id,  b.status_admin 
    from tbl_user a inner join tbl_testimonia b on a.id = b.user_id 
    where b.status_admin=0 and a.id in  
    (
    select a.id from tbl_user a 
    inner join tbl_testimonia b 
    on a.id = b.user_id
    where b.status_admin=0 
    group by a.id
    )
    )
这会选择我想要的内容,但创建视图的id字段不能分组,这意味着id字段不是唯一的,可以具有相同的值

到目前为止,我的问题是,如何在视图中唯一地选择id字段? 当然,我可以用PHP来做,但我可以在一个月前第一次遇到这个问题时做

我已经试着找到答案有一段时间了,但似乎找不到我问题的唯一答案

  • 编辑:MSSQL不起作用,因为即使子查询正在选择唯一ID,主查询中的in语句也会使该ID不相关
  • 编辑:示例输出::~(在MySql中,第三个字段是ommited)

  • 编辑:问题已解决对于简单的答案,请向Lieven发送一个大thx


如果您想拥有非重复ID,您可以

select DISTINCT a.id from tbl_user a 
inner join tbl_testimonia b 
  on a.id = b.user_id where b.status_admin=0 

在子查询中

如果您想拥有非重复ID,您可以

select DISTINCT a.id from tbl_user a 
inner join tbl_testimonia b 
  on a.id = b.user_id where b.status_admin=0 

在子查询中

正如您已经解释的那样,与SQL Server不同,MySQL允许使用未聚合的表达式进行分组

SELECT  *
FROM    mytable
GROUP BY
        column
GROUP BY中的未聚合表达式返回每个组中的任意记录,如果值不同,则不应使用该表达式。您应该能够在SQL Server中使用以下语句作为等效语句

select a.id as a_id
       , MIN(a.first_name)
       , MIN(a.last_name)
       , MIN(a.agent_code)
       , MIN(b.id as b_id)
       , MIN(b.user_id)
       , MIN(b.status_admin)
from   tbl_user a 
       inner join tbl_testimonia b on a.id = b.user_id 
where  b.status_admin=0  
group by 
       a.id
order by 
       b.id desc

正如您自己已经解释过的,与SQL Server不同,MySQL允许使用这样的未聚合表达式按分组

SELECT  *
FROM    mytable
GROUP BY
        column
GROUP BY中的未聚合表达式返回每个组中的任意记录,如果值不同,则不应使用该表达式。您应该能够在SQL Server中使用以下语句作为等效语句

select a.id as a_id
       , MIN(a.first_name)
       , MIN(a.last_name)
       , MIN(a.agent_code)
       , MIN(b.id as b_id)
       , MIN(b.user_id)
       , MIN(b.status_admin)
from   tbl_user a 
       inner join tbl_testimonia b on a.id = b.user_id 
where  b.status_admin=0  
group by 
       a.id
order by 
       b.id desc

我问错问题了吗?我的解释错了吗?我怎样才能把所有的专家都吸引到这个领域呢?在认真考虑你的观点之前,为什么你不能将MySQL版本转换成MSSQL呢?它应该像这样跑?!如果它在MSSQL中没有返回正确的结果,那么它在MySQL中就不应该返回正确的结果。当然,我首先尝试了复制粘贴方法,但是我在group by中遇到了一个障碍,错误是我无法选择group by子句中没有的任何内容,因此子查询不起作用。你是对的,我错过了。将聚合函数应用于您不想显式分组的每个字段如何?(如果有两条id=1的记录,MySQL实际返回什么?一条记录还是两条记录?如果有,其他字段的值是什么?第一个字段,最后一个字段,…)嗯,再解释一下?你的意思是给每个字段加和还是什么?如何将聚合函数放入“varchar”字段?我先试试这个,然后回来。我问错问题了吗?我的解释错了吗?我怎样才能把所有的专家都吸引到这个领域呢?在认真考虑你的观点之前,为什么你不能将MySQL版本转换成MSSQL呢?它应该像这样跑?!如果它在MSSQL中没有返回正确的结果,那么它在MySQL中就不应该返回正确的结果。当然,我首先尝试了复制粘贴方法,但是我在group by中遇到了一个障碍,错误是我无法选择group by子句中没有的任何内容,因此子查询不起作用。你是对的,我错过了。将聚合函数应用于您不想显式分组的每个字段如何?(如果有两条id=1的记录,MySQL实际返回什么?一条记录还是两条记录?如果有,其他字段的值是什么?第一个字段,最后一个字段,…)嗯,再解释一下?你的意思是给每个字段加和还是什么?如何将聚合函数放入“varchar”字段?我将首先尝试此操作,然后返回。子查询已经在选择不同的值,但第一个查询仍然选择相同的值。我是否应该删除子查询以简化问题?子查询已经在选择不同的值,但第一个查询仍然选择相同的值。我应该删除子查询以使问题更简单吗?酷,它可以工作!我假设u只能在数字字段上放置聚合函数。非常感谢!酷,它工作了!我假设u只能在数字字段上放置聚合函数。非常感谢!