【发布时间】:2017-05-10 15:07:19
【问题描述】:
例如:
pk_ref fk
====== ===
1 a
1 b
1 c
2 a
2 b
2 d
如何进行类似“伪”查询的查询:
select distinc pk_ref
where fk in all('a', 'c');
返回的查询结果必须匹配列表中外键的所有给定值。
结果应该是:
1
虽然下面的选择不能返回任何记录。
select distinc pk_ref
where fk in all('a', 'c', 'd');
我该怎么做?
【问题讨论】:
-
你在使用 SQL Server 吗?
-
是的,但是如果有标准的sql不管db引擎会更好。
-
fk值的“变量”列表是如何传入的?一种通用方法可能是有一个子查询,您可以在其中选择不同的 pk,fk where fk in list,并在外部查询中按 pk 分组并计算行数。但是对于最终过滤器(HAVING 子句),您需要知道列表中有多少个值,因此您需要能够计算它们。那么......如何将列表提供给查询?
-
@mathguy fk 值列表将由用户在应用程序中以字符串形式给出,那么预期的查询结果应该如上面所讨论的那样。
标签: mysql sql sql-server oracle