【问题标题】:SQL, matching all the values in column b and return column a for those matchesSQL,匹配列 b 中的所有值并为这些匹配返回列 a
【发布时间】:2012-05-12 20:53:25
【问题描述】:

我只看一张表,我有我需要匹配的值,所以。

Col A / Col B
1 / 1
1 / 2
1 / 3
2 / 2
2 / 3
4 / 1
4 / 3

所以我传入的值是 1 和 3,我想返回 1 和 4。

我用 can 尝试了 group by,我不得不使用两个子查询,但是没有用。

编辑:理想情况下,我想使用选择查询,因为我需要在我在 sql server 之外构建的另一个查询中使用此查询。

EDIT2:理想情况下,我想将输入作为 csv 字符串传递

【问题讨论】:

  • 我不明白。为什么 1 和 3 返回 1 和 4?
  • 您的输入和输出标准是什么。请提供更多解释。
  • 输入标准为where col_B IN (1,3),输出为select Col_A

标签: sql sql-server sql-match-all relational-division


【解决方案1】:
select ColA 
from your_table
where ColB in(1, 3)
group by ColA
having count(ColA) > 1

【讨论】:

  • 你为什么在里面有HAVING 声明:/
  • @StuartBlackler:因为没有它,它将返回所有具有 either 13 作为值的 ColA。但是 OP 需要 ColA 和 both
  • 这是因为要求在 ColA 中显示满足 BOTH ColB where 子句的值。话虽如此,我认为当有两个以上的输入条件时这会起作用
  • 您的HAVING 子句应该是HAVING COUNT(DISTINCT ColB) = @Criteria,其中@Criteria 是colB 不同要求的数量。
  • @GarethD:如果 ColA 和 ColB 形成复合键,或者通过其他方法确保它们的唯一性,则不会。
【解决方案2】:

如果我理解正确,传入的值与 ColumnB 相关,而返回值来自 ColumnA:

SELECT      A.ColumnA
FROM        [YOUR TABLE] A
INNER JOIN  [YOUR TABLE] ON ( A.ColumnA = B.ColumnA AND B.ColumnB = 1 )
WHERE       A.ColumnB = 3

【讨论】:

  • 谢谢,不过,我可以传入许多输入值 :(
  • 你是如何传递这些值的?你能提供一些代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
相关资源
最近更新 更多