Select

顯示具有相同姓氏但不同名字的記錄,其中一個名字元合條件

  • November 16, 2018

我的 SQL 查詢比這更複雜,但這部分我被卡住了。例如,如果我有一張桌子:

lname        fname
--------     -----
Mitchell     Jason
Miles        Ryan
Miles        Mary
Mitchell     Craig
Payne        Jason 

我只想顯示名字是 Jason 並且存在另一個具有相同姓氏的記錄的行。

所以它應該只顯示

lname       fname
--------    -----
Mitchell    Jason 
Mitchell    Craig
WITH cte AS ( SELECT t1.lname, 
                    t1.fname, 
                    COUNT(t1.fname) OVER (PARTITION BY t2.lname) cnt
             FROM tbl t1, 
                  tbl t2 
             WHERE t1.lname = t2.lname 
               AND t2.fname = 'Jason'
            )
SELECT lname, fname
FROM cte
WHERE cnt > 1

chittybang回答中用小提琴測試它。

假設您使用的是 SQL Server,您可以執行以下操作:

SELECT c.lname, c.fname
FROM tbl as c
WHERE c.lname IN (SELECT a.lname
                   FROM 
       tbl as a inner join
       (SELECT lname
                         FROM tbl
                         GROUP BY lname
                         HAVING COUNT (lname)> 1)
                   AS b on a.lname = b.lname 
   WHERE a.fname = 'Jason');

你可以在這個小提琴中測試它

希望這對您有所幫助。

引用自:https://dba.stackexchange.com/questions/222731