我有查询在数据库中选择类似的关键字。但是,查询正在选择自己的ID作为我试图找到类似推荐的ID。我只想要建议而不是重复的ID。我试过'!='和'<>'在productID之后,但这似乎打破了它。
因此,对于这个,它将选择ID 22及其类似产品。我不希望它选择22。
答案 0 :(得分:1)
我并不完全清楚你已经尝试过的事情;描述留有一点解释。我可以说这个应该工作:
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;
如果这是你尝试过的并且它没有用的东西,那么你需要指明它不起作用的方式。 (错误信息?数据不正确(如果是,如何)?
答案 1 :(得分:0)
也许我不理解这个问题但是它不像下面那么简单:
SELECT * FROM产品WHERE prodID 在 (SELECT prodID FROM keywords WHERE proid&lt;&gt; 22))LIMIT 4;
答案 2 :(得分:0)
我个人不喜欢嵌套子查询那么多,但如果你必须这样做,你可以通过添加'prodID&lt;&gt;来实现你的结果。 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;
如果您不受此限制,请注意使用加入可以获得更好的效果:
LEFT [OUTER] JOIN可能比同等的子查询更快,因为服务器可能能够更好地优化它 - 这一事实并非仅针对MySQL Server。
在SQL-92之前,外连接不存在,因此子查询是 做某些事情的唯一方法。今天,MySQL服务器和许多其他 现代数据库系统提供各种外连接类型
您可能需要查看这些内容以提高查询效果:https://dev.mysql.com/doc/refman/5.7/en/rewriting-subqueries.html