我正在努力解决问题。如果你问我,这似乎是一个脑筋急转弯。
给定两个表,当第二个表中的每条记录匹配时,仅返回第一个表中的值。因此,表1中的记录必须与表2中的每条记录匹配。如果表2的行数少于每行,我希望将其从最终结果中排除。
这必须在不使用count,having,group by的情况下完成。我必须用联合,交叉,除了存在来解决它。
我正在使用SQL Server BTW。
CREATE TABLE table1 (id int, lid int)
INSERT INTO table1 VALUES (1, 1),(1, 2),(1,3),(1,4),(2,1),(3,3),(4,4)
CREATE TABLE table2 (lid int)
INSERT INTO table2 VALUES (1),(2),(3),(4)
表1 :
id lid
--------
1 1
1 2
1 3
1 4
2 1
3 3
4 4
表2 :
lid
-----
1
2
3
4
这里的方法“不是我应该解决的方式”。令人沮丧的是因为这个解决方案非常简单并且完全应该做的事情。我不能使用计数,分组和拥有。
SELECT id
FROM dbo.table1, dbo.table2
WHERE table1.lid = table2.lid
GROUP BY id
HAVING COUNT(*) = (SELECT COUNT(*) FROM dbo.table2)
所以基本上我需要找到一种方法,当表2中没有完整的匹配项时从第一个表中排除结果。在这个例子中,表1中唯一的值与表2中的每个记录匹配是1. 2,3,4需要被排除在外。
答案 0 :(得分:3)
您正在寻找的是一个名字。它被称为relational division。它在SQL中没有等效,尽管可以通过各种方式进行模拟。 Joe Celko has written one of the most complete blog posts about the topic
由于您必须在SQL中使用一些更基本的关系运算符,因此这可能是您的一个解决方案:
<script>
$(document).ready(function () {
$("button").click(function () {
alert(this.id); // or alert($(this).attr('id'));
});
$(".hh").click(function () {
alert("gggg");
});
$("#btn2").click(function () {
$("ol").append("<li> <button id='hh'>Appended item</button></li>");
});
});
</script>
<!DOCTYPE html>
<html>
<head>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<ol>
</ol>
<button id="btn2">Append list item</button>
</body>
</html>
用非正式的英语读取:
获取
中的元素不匹配SELECT DISTINCT id FROM table1 t1a WHERE NOT EXISTS ( SELECT * FROM table2 WHERE NOT EXISTS ( SELECT * FROM table1 t1b WHERE t1a.id = t1b.id AND t2.lid = t1b.lid ) )
中table1
中没有元素的所有元素,这些元素与table2
或者:
获取
中的元素table1
中的元素,其中所有符合table1
答案 1 :(得分:1)
这是解决方案之一:
select distinct id from table1 AS T1
where not exists(
select lid from table2
except
select lid from table1 where id = T1.id
)