我只想显示一个项目,如果它存在于产品中,并且出价,但是如果id匹配orders表中的一行,则不要选择它,这是我到目前为止使用的sql:

SELECT *
FROM   products
       RIGHT JOIN bids
               ON bids.bids_item = id
WHERE  username = ?
       AND Now() > enddate
       AND enabled = 1
GROUP  BY bids.bids_item
ORDER  BY enddate


如果bids.bids_item作为orders.orders_product存在,则不尝试选择,但如果不这样做,则尝试选择该行。我将如何去做?

表格:

products
   id
orders
   orders.order_product

最佳答案

当您说要在竞标中同时包含productsbids时,为什么对竞标使用正确的联接,我有些困惑。另外,持续使用[alias].[column]可以使我更容易理解作为答题者的方式,以及以后使用该代码的任何人。也就是说,您可以执行以下操作:

SELECT *
FROM   products p
INNER JOIN bids b ON b.bids_item = p.id -- inner join on bids as we only want to include when exists in both p and b
LEFT JOIN orders o ON p.id = o.orders_product
WHERE o.orders_product IS NULL -- left join and filter where p.id does not exist in o
   and username = ?
   AND Now() > enddate
   AND enabled = 1

关于mysql - 如果另一个表中有匹配这些详细信息的行,则不要选择项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29242436/

10-12 01:07