VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 878|回复: 6

联表查询 取一条记录

[复制链接]

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-14 00:00:01 | 显示全部楼层 |阅读模式
情况是这样的,两张表……

产品表 tb_product
p_code(产品代号) p_status(状态)
111              7
222              8
333              9
此表p_code唯一,没有重复

使用情况表 tb_usemode
u_code(产品代号) u_status(状态)
111              1
111              1
222              3
222              2
333              0
此表u_code有重复,u_status也有重复

如何联表查询出:
tb_product中p_status=8或tb_usemode中u_status=1的所有不重复记录
就是产品代号不能重复。

得到的结果应该是这样的
p_code  u_code  p_status  u_status
111     111     7         1
222     222     8         2(3)

如果u_status有两条,取其中一条即可。

谢谢各位,费心了。
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-4-12 13:00:02 | 显示全部楼层
select p_code,  u_code,  p_status , u_status=min(u_status)
from tb_product a inner join tb_usemode b where a.p_code=b.u_code
group by p_code,  u_code,  p_status
回复

使用道具 举报

0

主题

114

帖子

69.00

积分

新手上路

Rank: 1

积分
69.00
发表于 2020-4-12 17:00:01 | 显示全部楼层
select a.p_code,  b.u_code,  a.p_status,  b.u_status from table1 a join table2 b on a.p_code=b.u_code where b.u_status=1 group by .p_code,  b.u_code,  a.p_status
union all
select a.p_code,  b.u_code,  a.p_status,  b.u_status from table1 a join table2 b on a.p_code=b.u_code where a.p_status=8 and b.u_status in(select top 1 u_status from table2) group by .p_code,  b.u_code,  a.p_status
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-4-12 17:30:01 | 显示全部楼层
declare @tb_product table(p_code int, p_status int)
insert @tb_product
select 111,              7
union all select 222,              8
union all select 333,              9


declare @tb_usemode table(u_code int, u_status int)
insert @tb_usemode
select 111,              1
union all select 111,              1
union all select 222,              3
union all select 222 ,             2
union all select 333  ,            0

select p_code,  u_code,  p_status , u_status=min(u_status)
from @tb_product a inner join @tb_usemode b on a.p_code=b.u_code--这里的where 改为on
group by p_code,  u_code,  p_status


(所影响的行数为 3 行)


(所影响的行数为 5 行)

p_code      u_code      p_status    u_status   
----------- ----------- ----------- -----------
111         111         7           1
222         222         8           2
333         333         9           0

(所影响的行数为 3 行)

回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-4-12 18:30:01 | 显示全部楼层
declare @tb_product table(p_code int, p_status int)
insert @tb_product
select 111,              7
union all select 222,              8
union all select 333,              9


declare @tb_usemode table(u_code int, u_status int)
insert @tb_usemode
select 111,              1
union all select 111,              1
union all select 222,              3
union all select 222 ,             2
union all select 333  ,            0

select p_code,  u_code,  p_status , u_status=min(u_status)
from @tb_product a inner join @tb_usemode b on a.p_code=b.u_code--这里的where 改为on
where u_status>0--排除楼主显示为看到有0这条记录
group by p_code,  u_code,  p_status


(所影响的行数为 3 行)


(所影响的行数为 5 行)

p_code      u_code      p_status    u_status   
----------- ----------- ----------- -----------
111         111         7           1
222         222         8           2

(所影响的行数为 2 行)

回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-4-13 09:00:01 | 显示全部楼层
可以的

select p_code,u_code,p_status,u_status=min(u_status)
from tb_product a
inner join tb_usemode b on a.p_code=b.u_code
where a.p_status=8 or b.u_status=1
group by p_code,u_code,p_status

谢谢了。
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-4-13 10:30:02 | 显示全部楼层
谢谢各位了。
我改了改……

select p_code,u_code,p_status,u_status=min(u_status)
from tb_product a
inner join tb_usemode b on a.p_code=b.u_code
where a.p_status=8 or b.u_status=1
group by p_code,u_code,p_status

是可以的,再次谢谢各位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表