ขอสอบการเขียนคิวรี่ Mysql ครับ

ผมมีฐานข้อมูล 'sport_test' ประมาณนี้ครับ (ซี่งจิงๆฟิลจะมากกว่านี้) คือ ID (รหัส) | Age (อายุ) | Test_type (ประเภทกีฬาที่ทดสอบ)
-------------------------
ID  | Age| Test_type
-------------------------
1   | 15  |  A
1   | 15  |  C
2   | 18  |  A
2   | 18  |  B
2   | 18  |  C
3   | 20  |  C
3   | 20  |  D
4   | 19  |  C

ผมอยากทราบว่า มี ID ใดบ้างที่เข้าทดสอบครบตามประเภท(type_test) ที่กำหนด
คือ..
1. มาแค่ type A อย่างเดียวก็ได้  หรือ
2. ต้องมาทั้ง A และ B   หรือ
3. ต้องมาทั้ง C และ D

ผมต้องเขียนคำสั่ง Query อย่างไรครับ  ซึ่งID ที่ควรจะออกมาตามเงื่อนไขดังกล่าวคือ
1  , 2 และ 3    โดย 4 จะไม่ออกเพราะ มีแค่ type C

ขอบคุณมากๆครับ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 4
condition #1. มาแค่ type A อย่างเดียวก็ได้  หรือ
SELECT id FROM sport_test WHERE test_type = 'A'
=1

condition #2. ต้องมาทั้ง A และ B หรือ (A intersect B)
SELECT id FROM sport_test WHERE test_type = 'A'
AND id IN (SELECT id FROM sport_test WHERE test_type = 'B')
= 1, 2

condition #3. ต้องมาทั้ง C และ D (C intersect D)
SELECT id FROM sport_test WHERE test_type = 'C'
AND id IN (SELECT id FROM sport_test WHERE test_type = 'D')
= 3

ผมต้องเขียนคำสั่ง Query อย่างไรครับ  ซึ่งID ที่ควรจะออกมาตามเงื่อนไขดังกล่าวคือ
1, 2 และ 3 โดย 4 จะไม่ออกเพราะ มีแค่ type C

union 1,2,3 ได้ id แล้วจะไปทำอะไรต่อก็ได้

SELECT
   *
FROM
   sport_test
WHERE
   id IN (
      -- condition 1 = A
      SELECT id FROM sport_test WHERE test_type = 'A'
      UNION
      -- condition 2 = A intersect B
      (
         SELECT id FROM sport_test WHERE test_type = 'A'
         AND id IN (SELECT id FROM sport_test WHERE test_type = 'B')
      )
      UNION
      -- condition 3 = C intersect D
      (
         SELECT id FROM sport_test WHERE test_type = 'C'
         AND id IN (SELECT id FROM sport_test WHERE test_type = 'D')
      )
);
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่