Buz*_*bba 3 sql t-sql sql-server
有人可以向我解释这个SQL查询匹配的语法是什么?
SELECT DISTINCT boats.boatid
FROM boats LEFT JOIN reservations ON
reservations.boatid = boats.boatid
and (@paramFromDate <= reservations.to AND reservations.from <= @paramToDate )
WHERE reservations.to IS NULL
Run Code Online (Sandbox Code Playgroud)
表:
**boats** boatid
**reservations** reservationid, fk_boatid, from, to
Run Code Online (Sandbox Code Playgroud)
查询的想法是获得标有params的日期范围的非保留船.任何部分范围甚至部分覆盖的船只都无法使用.
这个"和......"代码怎么样?为什么缺少像WHERE关键字这样的东西?好像WHERE隐含在哪里?
当你进行JOIN时,你可以有多个标准.AND就是这样,只有当"this"和"that"为真时才加入.您也可以将其移动到WHERE子句,但如果它是JOIN条件的一部分,SQL可以更好地优化它.更不用说在这种情况下,由于LEFT JOIN,它可能会给出不同的结果.我无法分辨,因为我不确定max和minprice来自哪些表.
简而言之,它是连接条件的一部分.
SELECT DISTINCT beverages.beverageid
FROM beverages
LEFT JOIN invoices ON invoices.beverageid = beverages.beverageid AND (100 <= maxprice AND minprice <= 500)
WHERE maxprice IS NULL
Run Code Online (Sandbox Code Playgroud)
(重写代码,以便更容易理解)