我无法想出一种比较SQL Server(2005)中某些数据的方法。我有两个表,我需要确保表2中的值在表2中匹配。这是表结构和一些示例数据。
Table 1
GenreId
6
这是一个临时表,其中包含传入的ID列表。
Table 2
Show| GenreId
Show1 | 2
Show1 | 6
Show2 | 6
这个表可以有很多GenreIds用于节目。我试图弄清楚如何检索的结果是我只需要只有表1中的GenreIds的显示。所以我期望的结果将是:
如果表1有6,我希望只能获得Show2。如果表1有2和6,那么我得到Show1和Show2。
我知道这可能很简单,但我真的画了一个空白。非常感谢任何帮助。
答案 0 :(得分:1)
这是您正在寻找的查询:
SELECT SHOW FROM t2
WHERE SHOW NOT IN (
SELECT SHOW FROM t2
WHERE genreId NOT IN (6, 2)
)
GROUP BY SHOW
HAVING count(DISTINCT genreId) = 2
这些查询有点棘手。请注意HAVING
子句中的数字必须与IN
子句中的AMOUNT项匹配。
现在,假设您有一个包含这些ID的表,那么您可以这样解决:
SELECT SHOW FROM t2
WHERE SHOW NOT IN (
SELECT SHOW FROM t2
WHERE genreId NOT IN (
SELECT genreId FROM t1
)
)
GROUP BY SHOW
HAVING count(DISTINCT genreId) = (SELECT COUNT(*) FROM t1)
小提琴here。
答案 1 :(得分:1)
嗯,这应该有效,但如果Table2
很大,可能会有糟糕的表现......
SELECT * FROM Table2 t2
WHERE NOT EXISTS(
SELECT GenreID
FROM Table1
WHERE GenreID NOT IN (
SELECT GenreID
FROM Table2
WHERE Show = t2.Show))
AND NOT EXISTS(
SELECT GenreID
FROM Table2
WHERE GenreID NOT IN (
SELECT GenreID FROM Table1)
AND Show = t2.Show)
答案 2 :(得分:1)
如果表1有6,我希望只能获得Show2。如果表1有2和6, 然后我得到Show1和Show2。
Fiddle demo (Demo在Sql Server 2012上,但查询应该在2005上运行):
select Max([show]) myShow
from T2 join T1
on T2.GenreId = T1.GenreId
Group by T2.GenreId;
答案 3 :(得分:0)
select Show from Table2
inner join Table1
on Table1.GenreId = Table2.GenreId
答案 4 :(得分:0)
使用此查询。它会检查节目是否是所选流派的唯一节目。
SELECT DISTINCT Show FROM Table2
INNER JOIN Table1 ON Table1.GenreId = Table2.GenreId
AND (SELECT Count(DISTINCT GenreId) FROM Table2 T2 WHERE Table2.Show = T2.Show) = 1
答案 5 :(得分:0)
我的坏。我想,我明白你现在在问什么。
此?
select Show from Table2
where genreid in (select genreid from Table1)
except
select Show from Table2
where genreid not in (select Genreid from Table1)