簡體   English   中英

將表連接到另一行后查詢表的每一行

[英]Query every row of the table after joining it to another

我建立了一個SQL查詢來獲取所有可出租但未預訂的property地址:

  select property.address
  from (period join booking on period.propertyid = booking.propertyid) join property on period.propertyid = property.id
  where period.type = 'available'
  AND period.end >= TO_DATE('2016-01-25', 'YYYY-MM-DD')
  AND period.start <= TO_DATE('2016-01-20', 'YYYY-MM-DD')
  AND (
    booking.start > TO_DATE('2016-01-25', 'YYYY-MM-DD') OR
    booking.start < TO_DATE('2016-01-20', 'YYYY-MM-DD')
  )
  AND (
    booking.end > TO_DATE('2016-01-25', 'YYYY-MM-DD') OR
    booking.end < TO_DATE('2016-01-20', 'YYYY-MM-DD')
  );

但是,由於period join booking on period.propertyid = booking.propertyid進行了period join booking on period.propertyid = booking.propertyid因此它不會查詢booking表中不存在的properties (公寓)的periods

如何加入booking表,以便仍查詢所有periods

使用LEFT JOIN

select property.address
  from (
    period 
    left join booking on period.propertyid = booking.propertyid) 
... 
SELECT property.address
FROM property
LEFT JOIN period  ON period.propertyid = property.id
LEFT JOIN booking ON period.propertyid = booking.propertyid
WHERE period.type = 'available'
AND period.end   >= '2016-01-25'
AND period.start <= '2016-01-20'
AND (booking.start > '2016-01-25' OR booking.start < '2016-01-20')
AND (booking.end   > '2016-01-25' OR booking.end   < '2016-01-20')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM