-1

2つのテーブルがある場合、1つは次のとおりです。

| ID |  MAKER |
---------------
|  1 |  Honda |
|  2 | Toyota |
|  3 |   Ford |
|  4 |  Honda |
|  5 |   Ford |
|  6 |  Honda |

id は車の ID 番号、maker は車のメーカーです。

そしてもう一つは

購入

| CUSTID | CARID |
------------------
|      1 |     1 |
|      1 |     4 |
|      1 |     6 |
|      2 |     1 |
|      2 |     2 |
|      2 |     4 |
|      2 |     6 |
|      3 |     2 |
|      4 |     5 |
|      4 |     2 |

custid は顧客の ID で、carid は特定の車の ID です。

この 2 つを結合して、どの顧客がすべてを購入したかを把握する方法はありHondasますか?

4

3 に答える 3

1

両方のテーブルを で結合しCarID、グループ化しCustID、節を使用HAVINGして、CarID が 1、4、6 のすべてのレコードを取得する必要があります。ここ3で、HAVING句は CarID の番号 (つまり、1、4、および 6) を示します。

SELECT P.CustID, COUNT(CarID)
  FROM Purchase P
  JOIN Car C
    ON P.Carid = C.ID
 WHERE CarID IN (1,4,6)
 GROUP BY CustID
HAVING COUNT(CarID) = 3;

または、ID の代わりに名前を直接使用します。

SELECT P.CustID, COUNT(CarID)
  FROM Purchase P
  JOIN Car C
    ON P.Carid = C.ID
 WHERE Maker = 'Honda'
 GROUP BY CustID
HAVING COUNT(CarID) = 3;

カウント (この場合は 3) を取得するには、このクエリを使用します

SELECT COUNT(Maker) FROM Car WHERE Maker = 'Honda';

したがって、クエリ全体は次のようになります。

SELECT P.CustID, COUNT(CarID)
  FROM Purchase P
  JOIN Car C
    ON P.Carid = C.ID
 WHERE Maker = 'Honda'
 GROUP BY CustID
HAVING COUNT(CarID) = (SELECT COUNT(Maker) FROM Car WHERE Maker = 'Honda');

出力:

╔════════╦══════════════╗
║ CUSTID ║ COUNT(CARID) ║
╠════════╬══════════════╣
║      1 ║            3 ║
║      2 ║            3 ║
╚════════╩══════════════╝
于 2013-07-09T04:49:10.373 に答える
0

このクエリを試してください:

select P.CustID
from purchase P
inner join CAR C on P.CarID=C.CarID
WHERE C.Maker like '%Honda%'
group by CustID
having count(P.CarID)=
    (select count(*) from CAR C where C.Maker like '%Honda%')

SQL フィドル

于 2013-07-09T04:48:51.393 に答える
0

これを試して :

SELECT A.*, B.*, C.* FROM purchase AS A
INNER JOIN(customer AS B) ON(A.cust_id = B.cust_id)
INNER JOIN(car AS C) ON(A.car_id = C.car_id)
WHERE A.car_id = '1'

テーブルがあるとしcustomerます。また、purchaseテーブルには のようなプライマリ フィールドが必要であることに注意してくださいpurchase_id。そしてWHERE A.car_id = '1'それはあなたのホンダのIDが1

于 2013-07-09T04:54:12.637 に答える