我有以下表格:
表A
.get_object()
表C [Cid,X],其中Cid为表A中的外键。
我希望从表A中获取包含Jids J1和J2的所有CId。对于上表,我想返回C1作为输出。如果我输入一个AND子句,我就不会得到任何记录,如果我为J列添加一个OR子句,我也会在输出中得到C2。请协助。
答案 0 :(得分:2)
您可以使用HAVING COUNT ( DISTINCT)
CASE
块
或者,如Salman所建议的那样,将其过滤在where子句中。
PostgreSQL 9.6架构设置:
CREATE TABLE TableA
(Aid varchar(3), Cid varchar(3), Jid varchar(3))
;
INSERT INTO TableA
(Aid, Cid, Jid)
VALUES
('A1', 'C1', 'J1'),
('A2', 'C1', 'J2'),
('A3', 'C2', 'J1'),
('A4', 'C2', 'J3'),
('A5', 'C2', 'J3'),
('A7', 'C3', 'J2'),
('A8', 'C3', 'J2'),
('A9', 'C4', 'J1'),
('A10','C4', 'J1'),
('A11','C1', 'J3'),
('A12','C1', 'J2')
;
查询1 :
SELECT cid
FROM TABLEA
GROUP BY cid
HAVING COUNT (DISTINCT CASE jid
WHEN 'J1' THEN 'J1'
WHEN 'J2' THEN 'J2'
END) = 2
<强> Results 强>:
| cid |
|-----|
| C1 |
查询2 :
SELECT cid
FROM TABLEA
WHERE jid IN ('J1', 'J2')
GROUP BY cid
HAVING COUNT ( DISTINCT jid ) = 2
<强> Results 强>:
| cid |
|-----|
| C1 |
答案 1 :(得分:1)
此自我加入将为您提供必要的组合:
select distinct a1.Cid
from A as a1
inner join A as a2 on a2.Cid = a1.Cid
where a1.Jid = 'J1' and a2.Jid = 'J2'
注意:它仅适用于2个Jid的测试。
我希望这会有所帮助。
答案 2 :(得分:0)
从表A中获取包含Jids J1和J2
的所有CId
这意味着查询结果将包含基于表A中数据的C1和C2,因此不会发生以下情况。
我想将C1作为输出返回
答案 3 :(得分:0)
SELECT DISTINCT Cid
FROM Table_A a
JOIN Table_A b
ON a.Cid = b.Cid
WHERE a.Jid = 'J1'
AND b.Jid = 'J2';
答案 4 :(得分:0)
试,
select distinct cid from TableA a outer apply
(select jid from TableA where jid='J2' and cid=a.Cid) b
where a.jid='J1' and b.jid is not null