簡體   English   中英

Sql查詢僅獲取包含特定列中給定值的記錄

[英]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子句中對其進行過濾。

SQL小提琴

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM