如何查询两个表来比较数据

时间:2013-10-15 20:22:35

标签: sql sql-server sql-server-2005

我无法想出一种比较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。

我知道这可能很简单,但我真的画了一个空白。非常感谢任何帮助。

6 个答案:

答案 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)