簡體   English   中英

SQL select查詢僅在記錄具有單個值的字段時返回

[英]SQL select query to return only if a record has a field of a single value

到目前為止,我在這里構建了我的查詢:

SELECT POLICYNUMBER, FPLAN, FEFFYY, FEFFMM, FEFFDD, FINSTP, CLIENTNUM, FIRSTNAME, 
MIDNAME, LASTNAME, BIRTHDATE FROM PFCASBENE 
INNER JOIN CMRELATN ON POLICYNUMBER = KEYFIELD1 
INNER JOIN CMPERSON ON CLIENTNUM = CLIENTID
WHERE FPSFLG='I' OR FPSFLG='P' ORDER BY CLIENTNUM ASC

FINSTP字段具有保險類型代碼的單個字符。

編輯:POLICYNUMBER,FPLAN,FEFFYY,FEFFMM,FEFFDD,FINSTP是PFCASBENE中的字段CLIENTNUM是CMRELATN中的字段,FIRSTNAME,MIDNAME,LASTNAME,BIRTHDATE來自CMPERSON。 我之前應該說過。

如果客戶端只有 FINSTP ='F'的策略,我想返回結果。 如果他們有其他策略有FINSTP ='X','V'等,那么我不希望結果中有任何客戶記錄。

此查詢返回多行,因為客戶端可以有多個策略。 如果我在WHERE子句中放入FINSTP ='F',我可以得到結果,但這不是我想要的。 這將返回所有'F'。 我不確定還需要在where子句中添加什么來將此查詢調整為我需要它做的事情。

這適用於AS / 400系統上的DB2。

任何幫助將不勝感激!

  • 玩笑
SELECT POLICYNUMBER, FPLAN, FEFFYY, FEFFMM, FEFFDD, FINSTP, CLIENTNUM, FIRSTNAME, 
MIDNAME, LASTNAME, BIRTHDATE FROM PFCASBENE 
INNER JOIN CMRELATN ON POLICYNUMBER = KEYFIELD1 
INNER JOIN CMPERSON ON CLIENTNUM = CLIENTID
WHERE (FPSFLG='I' OR FPSFLG='P') AND CLIENTNUM not in (
SELECT CLIENTNUM FROM PFCASBENE 
INNER JOIN CMRELATN ON POLICYNUMBER = KEYFIELD1 
INNER JOIN CMPERSON ON CLIENTNUM = CLIENTID
WHERE FINSTP <> 'F')
ORDER BY CLIENTNUM ASC

Sub select表示,返回FINSTP不等於F的所有客戶端記錄,然后排除客戶端結果,即使他們的FINSTP為F(但由於其他FINSTP值,整個客戶端被清除。但如果他們只有FINSTP那么那個客戶就不會被排除在外。

我的基礎是OP說明:

如果客戶端只有 FINSTP ='F'的策略,我想返回結果。 如果他們有其他策略有FINSTP ='X','V'等,那么我不希望結果中有任何客戶記錄。

這應該這樣做:

SELECT POLICYNUMBER, FPLAN, FEFFYY, FEFFMM, FEFFDD, FINSTP, CLIENTNUM, FIRSTNAME, 
MIDNAME, LASTNAME, BIRTHDATE
FROM PFCASBENE 
JOIN CMRELATN ON POLICYNUMBER = KEYFIELD1 
JOIN CMPERSON ON CLIENTNUM = CLIENTID
WHERE FPSFLG IN ('I', 'P')
AND CLIENTNUM NOT IN (
    SELECT CLIENTNUM
    FROM PFCASBENE 
    JOIN CMRELATN ON POLICYNUMBER = KEYFIELD1 
    JOIN CMPERSON ON CLIENTNUM = CLIENTID
    WHERE FINSTP != 'F'
)
ORDER BY CLIENTNUM ASC

我通過使用FPSFLG IN ('I', 'P')而不是FPSFLG 'I' OR FPSFLG = 'P'來改進主查詢,除了整潔之外,更有可能使用索引(如果存在一個索引)柱)。

我會把它編碼為左連接,但我不知道哪些列來自哪些表 - 太多的猜測工作,這個查詢將起作用。

假設你的關鍵是POLICYNUMBER ,並FINSTP是一個場PFCASBENE ;

SELECT 
    POLICYNUMBER, FPLAN, FEFFYY, FEFFMM, FEFFDD, FINSTP, CLIENTNUM, FIRSTNAME, 
    MIDNAME, LASTNAME, BIRTHDATE 
FROM PFCASBENE 
INNER JOIN CMRELATN ON POLICYNUMBER = KEYFIELD1 
INNER JOIN CMPERSON ON CLIENTNUM = CLIENTID
WHERE 
    (FPSFLG='I' OR FPSFLG='P')
AND POLICYNUMBER NOT IN(--Policies other than F. You don't want them.
    SELECT POLICYNUMBER FROM PFCASBENE 
    WHERE FINSTP <> 'F'
)
ORDER BY CLIENTNUM ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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