Sql 从表A中选择在表B上至少有X条记录的记录
我有一个名为Sql 从表A中选择在表B上至少有X条记录的记录,sql,postgresql,Sql,Postgresql,我有一个名为users的表,另一个名为user\u flags,另一个名为flags users表包含一个name和id flags表包含一个name和id user\u flags包含user\u id和flag\u id 如果我想获得所有具有任何提供的标志名称的用户,那么查询是什么?也就是说,如果查询提供了“red”和“blue”,但用户只是与blue关联,那么我们将返回该用户 也就是说,如果我有以下模式:-并且我传递的标志名称是红色和蓝色,它将返回用户John的行,因为John有一个红色关
users
的表,另一个名为user\u flags
,另一个名为flags
users
表包含一个name
和id
flags
表包含一个name
和id
user\u flags
包含user\u id
和flag\u id
如果我想获得所有具有任何提供的标志名称的用户,那么查询是什么?也就是说,如果查询提供了“red”和“blue”,但用户只是与blue关联,那么我们将返回该用户
也就是说,如果我有以下模式:-并且我传递的标志名称是红色
和蓝色
,它将返回用户John的行,因为John有一个红色
关联标志。尝试此查询:
SELECT u.name
FROM users u INNER JOIN user_flags uf
ON u.id = uf.user_id
INNER JOIN flags f
ON uf.flag_id = f.id
WHERE F.name = 'red'
请注意,在FIDLE中,表名和列名与原始问题中使用的略有不同。您需要根据表的id值连接表,并使用where子句作为标志颜色名称。大概是这样的:
select * from Users U
join UsersFlags UF on UF.user_id = U.id
join Flags F on F.id = UF.flag_id
where F.name = 'red'
试试这个
SELECT s.id,s.name
FROM @users s
JOIN @users_flag uf ON s.id = uf.uid
JOIN @flag f ON f.id = uf.fid
WHERE f.NAME IN ('red','Blue')
还有一个
SELECT u.NAME
FROM USERS u
WHERE id IN (
SELECT uf.user_id
FROM UsersFlags uf
JOIN flags f ON uf.flag_id = f.id
WHERE f.NAME IN (
'red'
,'blue'
)
)
输出:
id name flag
-- ---- ----
1 John red
名称的条件在哪里?也许我的问题不清楚,但我想找到那些有标志的用户,这些标志的名称在一组给定的名称中。因此,如果John有红色的标志,并且在查询中我有标志名['red','blue']-John将是响应的一部分。
“获取所有具有**任何**给定标志名的用户”
。。。我的查询将过滤掉所有没有相应标志(名称)的用户。你对OP的理解不同吗?编辑以澄清我在寻找什么。很抱歉我的意思是,它们不需要满足所有条件,只需要满足给定条件中的任何一个(在查询中给出)。只需根据您的喜好添加一个WHERE
子句即可。我更新了查询以只保留有红旗的用户。如果我想使用多个名称怎么办?假设我想获取具有相关标志的用户,这些标志的名称为:“红色”、“蓝色”、“绿色”,等等。然后,您可以将where子句更改为:where F.name in('red”、“blue”、“green'))
@users
在SQL中是无效的标识符在我创建临时表的情况下。它仍然是无效的SQL,在PostgresClare@user TABLE(id INT,name VARCHAR(10))中不起作用。请在此临时表中插入值并在select语句中使用它。
id name flag
-- ---- ----
1 John red