哈洛,我有两张桌子offices_postcodes和办公室
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我想找到所有属于A办公室的邮政编码,但不属于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发布于 2018-09-27 08:08:14
我认为您可以尝试使用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 |https://stackoverflow.com/questions/52532109
复制相似问题