我第一次被要求使用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字段不是唯一的,并且可以具有相同的值。< / p>
我想我的问题是,如何在视图中唯一选择id字段? 我确定我可以用PHP做到这一点,但我可以在一个月前第一次遇到问题时做到这一点。
我一直试图找到答案一段时间,但似乎无法找到我的问题独有的答案
编辑:示例输出::〜(在MySql中省略第3个字段)
| 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的一个重大回答
答案 0 :(得分: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
答案 1 :(得分: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
您的子查询中的