晕, 我有两个表offices_postcodes和offices
offices_postcodes = id,postcode,office_id
offices = id,offices,department
情况是: 一个办公室有许多邮政编码,而一个邮政编码属于许多办公室, 示例:
postcode 0100036 has relation with office A
postcode 0100036 has relation with office B
postcode 0100035 only has relation with office A
postcode 0100037 has relation with office A
postcode 0100037 has relation with office B
postcode 0100039 only has relation with office A
我想查找所有属于Office A但不属于Office B的邮政编码,在这种情况下为0100035和0100039。
我们能做到吗?, 这是我到目前为止所做的,
SELECT Count(`offices_postcodes`.postcode),
`offices_postcodes`.postcode
FROM `offices_postcodes`,
`offices`
WHERE `offices_postcodes`.office_id = `offices`.id
AND `offices`.department_id = 1
AND offices_postcodes.deleted_at IS NULL
GROUP BY `offices_postcodes`.postcode
HAVING Count(`offices_postcodes`.postcode) = 1
数据邮政编码:
id postcode office_id
1 0100036 271
2 0100036 275
3 0100035 271
4 0100037 271
5 0100037 275
6 0100039 271
数据办公室
id offices department_id
271 A 1
275 B 1
预期结果
postcode
0100035
0100039
答案 0 :(得分:1)
我认为您可以尝试使用JOIN
并在op.office_id = o.id
上连接条件
模式(MySQL v5.7)
CREATE TABLE offices_postcodes(
id INT,
postcode VARCHAR(50),
office_id INT
);
INSERT INTO offices_postcodes VALUES (1,'0100036',271);
INSERT INTO offices_postcodes VALUES (2,'0100036',275);
INSERT INTO offices_postcodes VALUES (3,'0100035',271);
INSERT INTO offices_postcodes VALUES (4,'0100037',271);
INSERT INTO offices_postcodes VALUES (5,'0100037',275);
INSERT INTO offices_postcodes VALUES (6,'0100039',271);
CREATE TABLE offices(
id INT,
postcode VARCHAR(50),
department_id INT
);
INSERT INTO offices VALUES (271,'A',1);
INSERT INTO offices VALUES (275,'B',1);
查询#1
SELECT op.postcode
FROM `offices_postcodes` op JOIN `offices` o
ON op.office_id = o.id
GROUP BY op.postcode
having Count(op.postcode) = 1;
| postcode |
| -------- |
| 0100035 |
| 0100039 |