如何过滤在sql中的表中包含两个值的记录?

时间:2017-04-13 13:50:50

标签: sql

当我使用IN时,它会显示包含parameter1或parameter2的所有记录,但我希望它带来的记录包含两者,而不仅仅是其中一个。

如果我的问题不明确,我可以尝试再解释一下。

select Hatlar.Name
from HATLAR,
     [HAT-DURAK],
     DURAKLAR
where HATLAR.Hat_Id = [HAT-DURAK].Hat_Id
  and DURAKLAR.Durak_Id = [HAT-DURAK].Durak_Id
  and DURAKLAR.Name IN ('parameter1', 'parameter2')

3 个答案:

答案 0 :(得分:1)

GROUP BY。使用having count distinct确保两个DURAKLAR.Names都在那里。

select Hatlar.Name
from HATLAR,
     [HAT-DURAK],
     DURAKLAR
where HATLAR.Hat_Id = [HAT-DURAK].Hat_Id
  and DURAKLAR.Durak_Id = [HAT-DURAK].Durak_Id
  and DURAKLAR.Name IN ('parameter1', 'parameter2')
group by Hatlar.Name
having count(distinct DURAKLAR.Name) = 2

答案 1 :(得分:1)

首先,学会使用正确的JOIN语法。 FROM条款中的逗号在20世纪是如此。

其次,您可以使用GROUP BYHAVING

执行您想要的操作
Select h.Name
from HATLAR h join
     [HAT-DURAK] hd
     on h.Hat_Id = hd.Hat_Id join
     DURAKLAR d
     on d.Durak_Id = d.Durak_Id
where d.Name IN ('parameter1', 'parameter2')
group by n.Name
having count(d.Name) = 2;

注意:如果重复项可以出现在联结表中,请使用count(distinct d.Name)

答案 2 :(得分:0)

如果我理解这个问题,这应该有用(假设参数实际上是那个,而不是硬编码的字符串):

select Hatlar.Name
from HATLAR,
     [HAT-DURAK],
     DURAKLAR
where HATLAR.Hat_Id = [HAT-DURAK].Hat_Id
  and DURAKLAR.Durak_Id = [HAT-DURAK].Durak_Id
  and DURAKLAR.Name Like '%' + @parameter1 + '%'
  and DURAKLAR.Name Like '%' + @parameter2 + '%'