我试着用一个例子来澄清标题中的问题,
你有table吗 X
,此表包含列 foo VARCHAR
以及 bar INT
表中的值如下:
TABLE X
-------------
| foo | bar |
-------------
| 'a' | 1 |
| 'a' | 2 |
| 'a' | 3 |
| 'b' | 1 |
| 'b' | 2 |
| 'c' | 1 |
-------------
为了简化,我们将举一个子查询可以返回什么的例子 (1,2)
我想使用 (1,2)
这是:
----------
| result |
----------
| 'a' |
| 'b' |
----------
因为 a
以及 b
是唯一一个 1
以及 2
在 bar
列。
所以基本上,我想做的是得到 foo
具有所有 bar
子查询返回的值。
但是,我不知道这是否可行,因为我需要将多个具有相同属性的列分组 foo
然后比较他们的 bar
子查询返回的值。
如果你想尝试一下你自己这里是一个最小的生殖例子,你可以继续https://sqliteonline.com/
确保使用mysql或mariadb
CREATE TABLE X (
foo VARCHAR(16) NOT NULL,
bar INT NOT NULL,
PRIMARY KEY (foo,bar)
);
INSERT INTO X(foo,bar) VALUES ('a', 1);
INSERT INTO X(foo,bar) VALUES ('a', 2);
INSERT INTO X(foo,bar) VALUES ('a', 3);
INSERT INTO X(foo,bar) VALUES ('b', 1);
INSERT INTO X(foo,bar) VALUES ('b', 2);
INSERT INTO X(foo,bar) VALUES ('c', 1);
您不需要使用子查询,只需假设它也将返回 (1)
, (1,2)
, (2,3)
, (1,2,3)
或者其他组合(顺序无关紧要)。
1条答案
按热度按时间nszi6y051#
您可以使用聚合和筛选:
您的示例数据没有重复项。但如果有,就用
count(distinct bar) = 2
相反。编辑:
如果有子查询,请使用: