MySQL查询不选择相同的ID
我有查询选择数据库中的类似关键字。但是,查询选择自己的ID作为我试图找到类似的建议。我只是想要推荐而不是重复的ID。我在productID后尝试过'!='和'<>',但这似乎打破了它。MySQL查询不选择相同的ID
所以对于这个,它会选择ID 22以及其类似的产品。然而,我不希望它选择22。
也许我不明白的问题,但它是不是下面简单:
SELECT * FROM产品WHERE PRODID IN (SELECT PRODID从那里proid <关键字> 22))LIMIT 4;
我不清楚你已经试过了什么;该说明留有一点可以解释。我可以说,这应该工作:
SELECT *
FROM products
WHERE prodID IN (SELECT prodID
FROM keywords
WHERE attributeID IN (SELECT attributeID
FROM keywords a
WHERE prodID = 22
)
AND prodID <> 22
)
LIMIT 4;
如果这是你已经尝试过,并没有工作,那么你就需要在哪些方面没有奏效指定。 (错误信息?数据不正确(如果是这样,怎么办)?
你说的加入..这会更容易吗? – Han
呃......它可以根据连接重写。除非你看到性能问题,否则我会用你认为的更直观地反映逻辑的意图。 –
是的,再次看到连接 - 并注意,没有ORDER BY的LIMIT是非常没有意义的。 – Strawberry
我个人不喜欢嵌套子查询那么多,但如果你必须这样做,你可以通过添加'prodID <> 22 “只是限制之前:
SELECT * FROM products WHERE prodID IN
(SELECT prodID FROM keywords WHERE attributeID IN
(SELECT attributeID FROM keywords a WHERE prodID = 22))
AND prodID <> 22 LIMIT 4;
如果你不绑定到,请注意,您可以通过使用实现更好的性能加入:
左[外]连接可因为服务器可能会比等效的子查询更快能够更好地优化它 - 这不仅仅是MySQL服务器特有的事实。
在SQL-92之前,外连接不存在,所以子查询是 做某些事情的唯一方法。今天,MySQL服务器等众多现代数据库系统提供了多种外连接类型
。
你可能想看看这些来提高查询性能:https://dev.mysql.com/doc/refman/5.7/en/rewriting-subqueries.html
邮政一些示例数据和预期的结果。 –
'SELECT prodID FROM keywords where WHERE prodID!= 22 AND attributeID ...' – miken32
尽管我敢打赌你可以通过连接更高效地完成此操作。 – miken32