请教个简单又麻烦的SELECT

CnEve 2005-08-08 10:00:57
表A:(标识)ID, (唯一)Vid, (varchar)Vdata
1 v007 xxxxxxxx
2 v022 xxxxxxxx
3 v018 xxxxxxxx
4 v034 xxxxxxxx
..........
100 v088 xxxxxxxx

表B: (标识)ID, (可重复)Vid, (bool)State
25 v018 true
26 v007 true
27 v0022 false

如果只是简单的 SELECT A.ID, A.VID, A.Vdata, B.State FROM A INNER JOIN B ON A.VID = B.VID;
由于两个表的行数不同,而SHOW出的表A就有问题了:(
要求表A全部显示的时候,如果A.Vid = B.Vid,并且B.State=true时,就显示State值为true 否则全部为false。
谢谢,顶者有分。
...全文
106 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
CnEve 2005-08-08
  • 打赏
  • 举报
回复
IIF()里能不能用Where呀,要是可以就好办了
CnEve 2005-08-08
  • 打赏
  • 举报
回复
找到问题所在了,B.VID 有n个重复,数据就会多出n行
(在多个重复的B.VID中只有一个是TRUE)

tangqijun199(撒旦) 还有法子吗,结贴时我给你加到100分,谢谢
CnEve 2005-08-08
  • 打赏
  • 举报
回复
SELECT A.ID,
A.VID,
A.Vdata,
IIf(B.State=true,true,false) as stat
from A left join B on a.VID = B.VID
这样还行,不过数据凭空多出了两行,怪了
tangqijun199 2005-08-08
  • 打赏
  • 举报
回复
2个都试试
tangqijun199 2005-08-08
  • 打赏
  • 举报
回复
access好久没用过了.
上面我写的不行
你试试这个:

SELECT A.ID,
A.VID,
A.Vdata,IIF(b.State,'True','false') as State from A left join B on a.VID = B.VID
CnEve 2005-08-08
  • 打赏
  • 举报
回复
不行呀,请问Access里没有exists() 该怎么写啊?
我用了IIf()函数也不行
tangqijun199 2005-08-08
  • 打赏
  • 举报
回复
要不这样
SELECT A.ID,
A.VID,
A.Vdata,case b.State when true then 'True' else 'false' end as State
from A left join B on a.VID = B.VID
tangqijun199 2005-08-08
  • 打赏
  • 举报
回复
其实"select 1"或"select 2"……都可以主要是前面的exists是存在的意思。
CnEve 2005-08-08
  • 打赏
  • 举报
回复
请问这句是什么意思呀
(select 1 from B C where C.Vid=B.Vid and C.State='false')

“select 1” ??
vivianfdlpw 2005-08-08
  • 打赏
  • 举报
回复
SELECT A.ID,
A.VID,
A.Vdata,
[State]=case when exists(select 1 from B C where C.Vid=B.Vid and C.State='false')
then 'false'
else 'true'
end
FROM A
INNER JOIN B ON A.VID = B.VID

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧