1. ホーム
  2. sql

[解決済み] テーブルで複数のレコードを持つ行を選択する方法は?

2022-02-11 12:37:37

質問

"複数人で飲んだことのあるビールを選択してください"。基本的には、複数の人が飲んだビールのリストと、そのビールを飲んだ人の名前を表示するクエリ結果を取得しようとしています。group 節と having 節を使おうとしましたが、name 列と beer 列の両方から重複した値を取得することに興味があるため、group 節を使用できないことに気付きました。どうしたらいいでしょうか?

table bpb

sysnr       beer              name
----------  ----------------  ----------
1260        Guinness Draught  Agneta
11226       Gigantic IPA      Alan
11410       Alesmith Decaden  Alan
11581       Trashy Blonde     Alan
1260        Guinness Draught  Alan
1403        Tuborg            Alan
1416        Lowenbrau         Alan
1506        Jever             Alan
1515        Punk IPA          Alan
1523        Armageddon IPA    Alan
1540        Westmalle Double  Alan
1548        Brooklyn Lager    Alan
1553        Chang Beer        Alan
1559        Coors Light       Alan
1565        Bitburger         Alan
1565        Bitburger         Alan
1566        Pilsner Urquell   Alan
1574        Pabst Blue Ribbo  Alan
1585        San Miguel        Alan
1594        Lapin Kulta       Alan
1625        Sierra Nevada Pa  Alan
1642        Fullers London P  Alan
1649        Samuel Adams Bos  Alan
1650        Orval             Alan
1654        Duvel             Alan
1657        Chimay vit        Alan
1659        Leffe Blond       Alan
1664        Kwak              Alan
1670        DAB               Alan
1670        DAB               Alan
1675        Anchor Steam Bee  Alan
89607       Lagunitas IPA     Alan
89793       Maredsous Tripel  Alan
11410       Alesmith Decaden  Dick
1553        Chang Beer        Dick
1642        Fullers London P  Dick
1222        Sofiero           Dina
1574        Pabst Blue Ribbo  Dina
1650        Orval             Dina
11451       Pripps Bla        Fredrik
1403        Tuborg            Fredrik
1559        Coors Light       Fredrik
30611       Dugges High Five  Fredrik
11489       Gambrinus         Henrik
1353        Budvar            Henrik
1544        Litovel Classic   Henrik
1566        Pilsner Urquell   Henrik
1611        Breznak           Henrik
89301       Bernard           Henrik
11410       Alesmith Decaden  Janne
1260        Guinness Draught  Janne
1506        Jever             Janne
1559        Coors Light       Janne
1559        Coors Light       Janne
1649        Samuel Adams Bos  Janne
11410       Alesmith Decaden  Johan
1515        Punk IPA          Johan
1548        Brooklyn Lager    Johan
1559        Coors Light       Johan
1670        DAB               Johan
1403        Tuborg            Jonas
1403        Tuborg            Juha
1403        Tuborg            Juha
1522        Karhu             Juha
1523        Armageddon IPA    Juha
1566        Pilsner Urquell   Juha
1574        Pabst Blue Ribbo  Juha
1594        Lapin Kulta       Juha
30023       US Red Ale        Juha
30658       Stigbergets Sais  Juha
11433       Falcon Export     Kalle
1519        Saxon             Kalle
1522        Karhu             Kalle
1551        Citra Pale Ale    Kalle
1594        Lapin Kulta       Kalle
1675        Anchor Steam Bee  Kalle
30023       US Red Ale        Kalle
11433       Falcon Export     Kjell
1515        Punk IPA          Kjell
1548        Brooklyn Lager    Kjell
1559        Coors Light       Kjell
11226       Gigantic IPA      Lennart
11451       Pripps Bla        Lennart
11489       Gambrinus         Lennart
11581       Trashy Blonde     Lennart
1344        Amstel            Lennart
1403        Tuborg            Lennart
1407        Backyard Brew     Lennart
1523        Armageddon IPA    Lennart
1540        Westmalle Double  Lennart
1565        Bitburger         Lennart
1566        Pilsner Urquell   Lennart
1574        Pabst Blue Ribbo  Lennart
1594        Lapin Kulta       Lennart
1642        Fullers London P  Lennart
1650        Orval             Lennart
1659        Leffe Blond       Lennart
1664        Kwak              Lennart
1670        DAB               Lennart
89793       Maredsous Tripel  Lennart
1403        Tuborg            Lisen
1407        Backyard Brew     Lisen
1548        Brooklyn Lager    Lisen
1553        Chang Beer        Lisen
1565        Bitburger         Lisen
1594        Lapin Kulta       Lisen
1657        Chimay vit        Lisen
30611       Dugges High Five  Lisen
30658       Stigbergets Sais  Lisen
11410       Alesmith Decaden  Magnus
1260        Guinness Draught  Magnus
1407        Backyard Brew     Maria
11451       Pripps Bla        Marie
11489       Gambrinus         Rikard
1353        Budvar            Rikard
1540        Westmalle Double  Rikard
1544        Litovel Classic   Rikard
1611        Breznak           Rikard
1650        Orval             Rikard
1654        Duvel             Rikard
1657        Chimay vit        Rikard
1659        Leffe Blond       Rikard
1664        Kwak              Rikard
1670        DAB               Rikard
89793       Maredsous Tripel  Rikard
11410       Alesmith Decaden  Urban
1416        Lowenbrau         Urban
1506        Jever             Urban
1565        Bitburger         Urban
1642        Fullers London P  Urban
1670        DAB               Urban

解決方法は?

HAVING句の中に条件が必要です。

select beer
from bpb
group by beer
having count(distinct name) > 1

COUNT()でDISTINCTキーワードを使用すると、異なる名前だけがカウントされます。
もし、名前も欲しいのであれば

select * from bpb
where beer in (
    select beer
    from bpb
    group by beer
    having count(distinct name) > 1
)

またはEXISTSを使用してください。

select b.* from bpb b
where exists (
    select 1
    from bpb
    where beer = b.beer and name <> b.name
)