TL; DR如何在一个表中查找与另一个表中的所有(而不是ANY)行匹配的行?
这似乎很简单,但是我不知道正确的术语,所以我看到数十个使用INNER JOIN
,INTERSECT
,EXISTS
或ALL
的答案,但是达不到我所需要的。其他问题是PostgreSQL,通过应用程序动态生成的SQL,或者没有答案。
带以下喜欢不同颜色的人:
DECLARE @tbl TABLE (
FirstName nvarchar(50),
Color nvarchar(50)
);
INSERT INTO @tbl
(FirstName, Color)
VALUES
('Bob', 'Purple'),
('Bob', 'Red'),
('Bob', 'Yellow'),
('Fred', 'Purple'),
('Fred', 'Red'),
('Fred', 'Yellow'),
('Greg', 'Orange'),
('Greg', 'Red'),
('Harry', 'Red');
我需要找到喜欢我要搜索的所有颜色的人。
DECLARE @SearchColors TABLE (SearchColor nvarchar(50));
INSERT INTO @SearchColors (SearchColor) VALUES ('Red'),('Yellow');
因此,我只希望在结果中看到Bob
和Fred
,因为只有这两个人喜欢我要搜索的所有颜色。我不希望只喜欢一种颜色的人,但是,人们是否喜欢这两种颜色也没关系(例如Bob
喜欢3种颜色,包括我需要的两种颜色)。
通过在线阅读书籍,我发现ALL
看上去很接近我的需要,但实际上什么也没找到(除非我使用错了):
SELECT
*
FROM
@tbl
WHERE
(Color = ALL ( SELECT SearchColor FROM @SearchColors ));
答案 0 :(得分:1)
如何获取所需的颜色总数,过滤主表中的颜色,然后计算具有这么多条目的名称?
DECLARE @colorcount INT = (SELECT COUNT(DISTINCT SearchColor) FROM @SearchColors)
SELECT firstname
FROM @tbl
WHERE color IN (SELECT searchcolor FROM @SearchColors)
GROUP BY firstname
HAVING COUNT(DISTINCT color) = @colorcount
如果@tbl
两次出现在您的('Greg', 'Red')
中,或者您的@searchcolors
表中两次出现了('Red')
,这将处理您的$q5 = 'SELECT * FROM cities ORDER BY cityname';
$mytable5 = mysqli_query($conned, $q5);
$row5 = mysqli_fetch_all($mytable5,MYSQLI_ASSOC);
print_r ($row5);
echo "<br><br>";
foreach($row5 as $key => $value){
print "Key = " . $key . ". Value = " . $value . ".<br><br>";
}
中的骗子