[英]SQL Server 2014 : how to get records that have rows of different values of only particular column
[英]Sql query to only get records that contain given values in a particular column
我有以下表格:
表A.
Aid, Cid, Jid
A1, C1, J1
A2, C1, J2
A3, C2, J1
A4, C2, J3
表C [Cid,X],表C中有Cid作為外鍵。
我想從表A中獲取包含Jids J1和J2的所有CId。 對於上表,我想返回C1作為輸出。 如果我放置一個AND子句,我沒有得到任何記錄,如果我為J列放置一個OR子句,我也在輸出中得到C2。 請協助。
您可以使用帶有CASE
塊的HAVING COUNT ( DISTINCT)
,或者如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
結果 :
| cid |
|-----|
| C1 |
查詢2 :
SELECT cid
FROM TABLEA
WHERE jid IN ('J1', 'J2')
GROUP BY cid
HAVING COUNT ( DISTINCT jid ) = 2
結果 :
| cid |
|-----|
| C1 |
這種自我加入將為您提供必要的組合:
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的測試。
我希望這有幫助。
從表A中獲取包含Jids J1和J2的所有CId
這意味着查詢結果將包含基於表A中數據的C1和C2,因此不會發生以下情況。
我想返回C1作為輸出
SELECT DISTINCT Cid
FROM Table_A a
JOIN Table_A b
ON a.Cid = b.Cid
WHERE a.Jid = 'J1'
AND b.Jid = 'J2';
嘗試,
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.