0

私は次の記録を持っています:

name                            acct_num    address     city        rep     primary
DARTMOUTH HITCHCOCK HOSPITAL    1212 MEDICAL CENTER DR  LEBANON P   Meehan    Y
DARTMOUTH HITCHCOCK HOSPITAL    1212 MEDICAL CENTER DR  LEBANON P   Johnson   N

MASSACHUSETTS GENERAL HOSPITAL  891 PO BOX 123  CHARLESTOWN P   Morrison  N
MASSACHUSETTS GENERAL HOSPITAL  891 PO BOX 123  CHARLESTOWN P   McCoy     N
MASSACHUSETTS GENERAL HOSPITAL  891 PO BOX 123  CHARLESTOWN P   Lorena    N

CLINIC PHARMACY CONTROL SUPPLY  282043  1 MEDICAL CENTER DR LEBANON P Sikes   N
CLINIC PHARMACY CONTROL SUPPLY  282043  1 MEDICAL CENTER DR LEBANON P Kang    Y
CLINIC PHARMACY CONTROL SUPPLY  282043  1 MEDICAL CENTER DR LEBANON P Tolbert N

基本的に、主要な連絡先がない病院(すべてprimary ='N')に問い合わせる必要があります。したがって、上記のレコードでは、このレコードはすべてprimary ='N'であるため、MASSACHUSETTSGENERALHOSPITALを取得する必要があります。

私は試した:

SELECT * FROM `account_prof_affiliation_view` where primary_sf='N' GROUP BY accnt_num

ただし、これは、primary='N'が1つしかないすべてのレコードをキャプチャするだけです。これを行うための正しいSQLクエリは何ですか?

4

4 に答える 4

1

私の他の答えのように、照合に依存したくない場合は、これを使用できます。

SELECT accts.account_num
FROM (SELECT DISTINCT account_num FROM account_prof_affiliation_view) accts
     LEFT JOIN account_prof_affiliation_view aff
            ON (aff.primary_sf = 'Y' AND aff.account_num = accts.account_num)
WHERE aff.account_num IS NULL

データベース スキーマが2 番目の正規形に違反しているように見えることに注意してください。名前、住所、市区町村は account_num から推定できる可能性が高いため、その情報用に別のテーブルを用意することをお勧めします。名前が示すように、データが実際のテーブルからではなく、ビューから取得されたことが原因である場合、これは問題ありませんが、上記のサブクエリで基になるテーブル全体ではなく、基になるテーブルを使用することで効率を高めることができます。見る。

于 2012-08-02T21:42:46.053 に答える
1

1つの方法は次のとおりです。

SELECT name, accnt_num
FROM account_prof_affiliation_view
GROUP BY accnt_num, name
HAVING MAX(primary) = 'N'

'Y'これは、 の後にソートされるという事実を利用している'N'ため、そのグループにシングルがある場合は常にソートされます。MAX(primary)'Y''Y'

于 2012-08-02T21:34:07.810 に答える
1

を作成するときはGROUP BY、少なくとも選択したすべてのデータが含まれている必要があります。

于 2012-08-02T21:34:24.083 に答える
0
select * from account_prof_affiliation_view a
where not exists (
  select `primary` from account_prof_affiliation_view b
  where b.id=a.id
  and   b.primary = 'Y'
)
于 2012-08-02T21:34:44.750 に答える