选择union数据的反面

时间:2017-05-24 10:29:34

标签: javascript mysql node.js mariadb

我有产品,供应商,供应商的可用日期和预订表。目前,我的搜索功能只能搜索供应商可用日期,但不能搜索预订表。我使用供应商和供应商可用日期之间的左连接,并与选定的日期,时间和小时进行比较。搜索结果有效。如何在预订表中搜索?

产品表

id | vendor_id | title | description

供应商表

id | name

供应商可用表

id | vendor_id | d_day | d_start_hour | d_start_minute | d_end_hour | d_end_minute

预订表

id | vendor_id | d_date | d_day | d_start_hour | _start_minute

以下是我根据所选日期,start_hour和start_minute选择产品的方式:

SELECT * FROM product
LEFT JOIN ( SELECT * FROM vendor GROUP BY id ) vendor 
   ON vendor.id = product.vendor_id
LEFT JOIN ( SELECT * FROM vendor_available GROUP BY id) vendor_available 
   ON vendor_available.vendor_id = product.vendor_id
WHERE ( d_day = '4' 
AND (CONCAT(d_start_hour, '.' , d_start_minute) + 0.0) <= '12.15' 
AND (CONCAT(d_end_hour, '.', d_end_minute) + 0.0) >= '12.15')

4是选定的日期,12.15是客户端选定的小时和选定的分钟。

当用户选择12.15(12.15pm)时,查询将检查供应商可用时间之间的哪个产品可用。

如何在预订表中使用对面联合,以便已预订的产品不会显示给用户?

1 个答案:

答案 0 :(得分:0)

使用LEFT JOIN tbl时,将其添加到WHERE子句(而不是ON子句)是正常的

AND tbl.id IS NULL

这表示当tbl中没有行时,您希望仅返回 的结果。