我只想显示一个项目,如果它存在于产品中,并且出价,但是如果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
最佳答案
当您说要在竞标中同时包含products
和bids
时,为什么对竞标使用正确的联接,我有些困惑。另外,持续使用[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/