SELECT HW_ID
FROM TB_HARDWARE
WHERE (NOT (HW_ID SELECT DISTINCT HW_ID FROM TB_USELINE WHERE
(START_USE_DATE BETWEEN '2010-01-04' AND '2010-01-04')
AND(END_USE_DATE BETWEEN '2010-01-04' AND '2010-01-04'))
แล้วผมก็กำหนดว่า ให้แสดง อุปกรณ์ที่ไม่ได้ทำงานช่วงนี้ โดยการ NOT ค่า ที่ได้จาก SubQuery
มันก็สามารถใช้งานได้ครับ
จริงๆ วิธีแก้แบบหายขาดก็แค่เพิ่ม col status ของ hw ไปนะครับ เวลายืม ก็ให้ status เป็น occupied ถ้าว่างแล้วไม่มีใครใช้ก็ available หรือคำไหนก็ได้ที่คุณจะใช้
SELECT HW_ID
FROM TB_HARDWARE
WHERE (NOT (HW_ID SELECT DISTINCT HW_ID FROM TB_USELINE WHERE
(START_USE_DATE BETWEEN '2009-12-04' AND '2010-02-04') <- เปลี่ยนเวลา
AND(END_USE_DATE BETWEEN '2009-12-04' AND '2010-02-04')) <- เปลี่ยนเวลา
Date :
2010-02-01 13:27:31
By :
salapao_codeman
No. 2
Guest
SELECT DISTINCT HW_ID FROM TB_USELINE WHERE
(convert(varchar(10),START_USE_DATE,120) BETWEEN '2010-01-04' AND '2010-01-04')
AND (convert(varchar(10),END_USE_DATE,120) BETWEEN '2010-01-04' AND '2010-01-04')
SELECT
TB_HARDWARE. HW_ID
FROM
TB_HARDWARE
WHERE
TB_HARDWARE.HW_ID IN
( SELECT
DISTINCT
TB_USELINE .HW_ID
FROM
TB_USELINE
WHERE
NOT
TB_USELINE .HW_ID
BETWEEN
'2009-12-04'
AND
'2010-02-04'
)
sub query บอกว่า เลือกค่าที่ไม่มีและไม่ซ้ำของ HW_ID จากเทเบิล TB_USELINE โดย HW_ID อยู่ระหว่าง 2009-12-04 และ 2010-02-04
main query บอกว่า เลือกค่าที่มีใน HW_ID จากเทเบิล TB_HARDWARE ที่มีค่าอยู่ในเทเบิล sub query ด้วย
SELECT HW_ID
FROM TB_HARDWARE
WHERE (NOT (HW_ID SELECT DISTINCT HW_ID FROM TB_USELINE WHERE
(START_USE_DATE = '2009-12-04')
AND(END_USE_DATE = '2010-01-04'))
SELECT DISTINCT HW_ID FROM TB_USELINE WHERE
(('2010-01-11' BETWEEN START_USE_DATE AND END_USE_DATE)OR
('2010-01-15' BETWEEN START_USE_DATE AND END_USE_DATE)OR
(START_USE_DATE BETWEEN '2010-01-11' AND '2010-01-15')OR
(END_USE_DATE BETWEEN '2010-01-11' AND '2010-01-15')
)