我想创建一个sql查询,该查询创建一个不存在于db表中的列,并填充特定表中是否存在行。
例如:
我有3张桌子:
用户(对于用户列表) - UID,UName
位置(所有可用位置的列表) - LID,LName
UsersLocations(用户已签入的所有位置) - UserID,LocationID
我需要一个sql查询,它从用户ID中获取一个包含所有位置的表,其中一列表示用户是否在此位置。
用户表示例
UID | UName
1 John
4 Amy
5 Dann
位置表示例:
LID | LName
1 London
2 Barcelona
3 Paris
4 New York
UsersLocations表的示例:
UserID | LocationID
5 1
5 2
输出示例(对于userid = 5):
User ID | Location | Was Here
5 London true
5 Barcelona true
5 Paris false
5 New York false
输出需要包含位置表中的所有位置。 此外,UsersLocations表仅包含签入该位置的用户的用户ID。
答案 0 :(得分:0)
嗯。一种方法是相关子查询:
select u.userid, l.location,
(case when exists (select 1 from userLocations where ul.userid = u.userid and ul.lid = l.locationid)
then 'true'
else 'false'
end) as WasHere
from location l cross join
(select 5 as userid) u;
特定于数据库的唯一部分是u
的子查询。