我有两个表一个是主表,另一个表是你可以从第一个表中选择项目。
MasterTable
ItemID ItemName
1 Football
2 Cricket
3 Badminton
SelectionTable
UserID SelectedItemId
1 2
1 3
2 1
输出
UserId SelectedItemID SelectionStatus
1 1 False
1 2 True
1 3 True
查询
SELECT S.UserId,M.ItemID,
CASE M.ItemID
WHEN 1 Then 'True'
WHEN 2 Then 'True'
WHen 3 Then 'True' END AS SelectionStatus
From MasterTable M
JOIN SelectionTable S ON S.SelectedItemID=M.ItemID
WHERE S.UserId=1
如果没有选择任何项目,那么所有项目都是假的。我不知道该怎么做。
答案 0 :(得分:1)
假设您有一个User
表,您可以通过查询cartesean产品(交叉连接)来获取每个用户/项目组合的状态。
状态True
或False
可以确定SelectionTable
中是否存在相应记录。
select
u.UserId,
m.ItemId,
case
when exists
(select *
from SelectionTable s
where s.UserId = u.UserId
and s.SelectedItemId = m.ItemId)
then 'True'
else 'False'
end
from MasterTable m, User u
此技术可应用于单个用户案例(UserId
等于1),如下所示:
select
m.ItemId,
case
when exists
(select *
from SelectionTable s
where s.UserId = 1
and s.SelectedItemId = m.ItemId)
then 'True'
else 'False'
end
from MasterTable m
答案 1 :(得分:0)
您可以else
使用left join
和SelectionTable
MasterTable
。
SELECT S.UserId,M.ItemID,
CASE M.ItemID
WHEN 1 Then 'True'
WHEN 2 Then 'True'
WHen 3 Then 'True'
else 'False'
END AS SelectionStatus
From SelectionTable S
left JOIN MasterTable M ON S.SelectedItemID=M.ItemID
WHERE S.UserId=1