0

これは私がSQLで解決しなければならない大きな問題ですが、方法がわかりません。これは私のデータセットです:

customer; publisher; qty

これはデータ サンプルです。

CustA;  PublX;  10
CustA;  PublZ;  20
CustA;  PublF;  30
CustB;  PublX;   8
CustC;  PublD;   9 
CustD;  PublX;   9
CustD;  MyPub;  18
CustE;  PublZ;   3
CustE;  MyPub;   8

パブリッシャーとして「MyPubl」を使用せずに顧客のみを取得するクエリを実行する必要があります。明らかに私はできません:

SELECT * from myTable where Publisher <>"MyPubl"

1 つの解決策は、次のように顧客を 1 行に集約するサブセット テーブルを作成することです。

CustA; PublX PublZ PublF; 60
CustB; PublX; 8
etc...

次に、INSTRを使用して、2番目のフィールドにMyPubが存在するかどうかを確認します...このソリューションは私の仕事です..だから、SQLでこれを行うにはどうすればよいですか(「同じ」顧客を1行に集約する)?

他の提案(おそらくもっとエレガント)はありますか?

ありがとう

4

3 に答える 3

1

サブクエリで使用できNOT INます。

SELECT
    customer,
    publisher,
    qty
FROM
    books
WHERE
    customer NOT IN (
        SELECT
            DISTINCT customer
        FROM
            books
        WHERE
            publisher = 'MyPub'
    )

SQL フィドルのデモ

どちらが出力されますか:

CUSTOMER | PUBLISHER | QTY
---------+-----------+-----
CustA    | PublZ     |  20
CustA    | PublF     |  30
CustB    | PublX     |   8
CustC    | PublD     |   9
于 2013-11-04T14:05:58.760 に答える
1

多分これ:

SELECT * FROM myTable 
WHERE customer NOT IN (SELECT customer FROM myTable WHERE Publisher = "MyPubl")

または、顧客だけが必要な場合

SELECT DISTINCT customer FROM myTable
于 2013-11-04T14:04:04.393 に答える
0

それともオールドスクール...

SELECT DISTINCT x.customer 
           FROM my_table x 
           LEFT 
           JOIN my_table y 
             ON y.customer = x.customer 
            AND y.publisher = 'MyPub' 
          WHERE y.customer IS NULL;
于 2013-11-04T14:16:45.837 に答える