0

だから私は3つのテーブルを持っています。CUSTOMER( CustomerID , LastName, FirstName)、PURCHASE( PurchaseID , ItemName)、および TRANSACTION( CustomerID , PurchaseID , Date)。

私が抱えている問題は、「ペイント」と「本」の両方のアイテムを具体的に購入する顧客のフルネームを取得する必要があることですが、コードを実行しても何も表示されません。これが私が持っているものです:

SELECT CUSTOMER.FirstName, CUSTOMER.LastName
FROM CUSTOMER, PURCHASE
WHERE PURCHASE.Item = 'Paint' AND PURCHASE.Item = 'Books'
GROUP BY CUSTOMER.LastName, CUSTOMER.FirstName;

助けてください、私はこれに本当に慣れていないので、本当に助けてほしいです。

4

4 に答える 4

5

このタイプの問題は と呼ばれRelational Divisionます。

SELECT  CUSTOMER.FirstName, CUSTOMER.LastName
FROM    CUSTOMER    
        INNER JOIN TRANSACTION
            ON CUSTOMER.CustomerID = TRANSACTION.CustomerID
        INNER JOIN PURCHASE
            ON TRANSACTION.PurchaseID = PURCHASE.PurchaseID
WHERE   PURCHASE.Item IN ('Paint', 'Books')  -- list all items here
GROUP   BY CUSTOMER.LastName, CUSTOMER.FirstName
HAVING  COUNT(DISTINCT PURCHASE.Item) = 2 -- the total number of items searched

UNIQUE各トランザクションごとに適用された制約がある場合は、ItemName使用できます*

SELECT  CUSTOMER.FirstName, CUSTOMER.LastName
FROM    CUSTOMER    
        INNER JOIN TRANSACTION
            ON CUSTOMER.CustomerID = TRANSACTION.CustomerID
        INNER JOIN PURCHASE
            ON TRANSACTION.PurchaseID = PURCHASE.PurchaseID
WHERE   PURCHASE.Item IN ('Paint', 'Books')
GROUP   BY CUSTOMER.LastName, CUSTOMER.FirstName
HAVING  COUNT(*) = 2
于 2013-05-06T07:52:48.787 に答える
1

接続なし..

SELECT DISTINCT CUSTOMER.FirstName, CUSTOMER.LastName
FROM CUSTOMER A 
JOIN TRANSACTION B
ON A.CUSTOMERID=B.CUSTOMERID
JOIN PURCHASE C
ON B.PURCHASEID=C.PURCHASEID AND C.ITEM='Paint'
JOIN PURCHASE D 
ON B.PURCHASEID=D.PURCHASEID AND D.C.Item = 'Books'
于 2013-05-06T07:52:33.903 に答える
0

JOINテーブルが必要です。試す

SELECT CUSTOMER.FirstName, CUSTOMER.LastName
FROM   CUSTOMER 
       INNER JOIN TRANSACTION ON TRANSACTION.CustomerID=CUSTOMER.CustomerID 
       INNER JOIN PURCHASE ON PURCHASE.PurchaseID=TRANSACTION.PurchaseID
WHERE PURCHASE.Item = 'Paint' OR PURCHASE.Item = 'Books'
GROUP BY CUSTOMER.LastName, CUSTOMER.FirstName
HAVING COUNT(DISTINCT PURCHASE.Item) >= 2;
于 2013-05-06T07:54:38.490 に答える
0
SELECT CUSTOMER.FirstName, CUSTOMER.LastName
FROM CUSTOMER C, PURCHASE P, TRANSACTION T
WHERE
C.CUSTOMERID = T.CUSTOMERID AND T.PurchaseID = P.PurchaseID
AND P.Item IN ('Paint','Books')

これは疑似コードです。自分で試してみてください。

于 2013-05-06T07:58:22.147 に答える