1

背景:

我首先被要求做一个使用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语句也使这无关紧要
  • 编辑:示例输出::~(在 MySql 中省略了第三个字段)

    | a_id  |  firstN | LastN |  agent_code  |   b_id  |  user_id |status_admin|
    +--------------------------------------------------------------------------+
    | 32    |  fn1    | ln1   |  AC123213    |   14    |   32     |   0        |
    | 41    |  fn2    | ln2   |  12345678    |   15    |   41     |   0        |
    | 32    |  fn1    | ln1   |  AC123213    |   16    |   32     |   0        |
    
  • 编辑:问题为 Lieven 解决了一个简单的答案

4

2 回答 2

1

正如您已经解释过的那样,与 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
于 2011-12-29T04:11:53.090 回答
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 

在您的子查询中

于 2011-12-28T10:54:03.757 回答