Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表A中选择在表B上至少有X条记录的记录_Sql_Postgresql - Fatal编程技术网

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