MySQL查询不选择相同的ID

问题描述:

我有查询选择数据库中的类似关键字。但是,查询选择自己的ID作为我试图找到类似的建议。我只是想要推荐而不是重复的ID。我在productID后尝试过'!='和'<>',但这似乎打破了它。MySQL查询不选择相同的ID

所以对于这个,它会选择ID 22以及其类似的产品。然而,我不希望它选择22。

+0

邮政一些示例数据和预期的结果。 –

+0

'SELECT prodID FROM keywords where WHERE prodID!= 22 AND attributeID ...' – miken32

+0

尽管我敢打赌你可以通过连接更高效地完成此操作。 – miken32

也许我不明白的问题,但它是不是下面简单:

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; 

如果这是你已经尝试过,并没有工作,那么你就需要在哪些方面没有奏效指定。 (错误信息?数据不正确(如果是这样,怎么办)?

+0

你说的加入..这会更容易吗? – Han

+0

呃......它可以根据连接重写。除非你看到性能问题,否则我会用你认为的更直观地反映逻辑的意图。 –

+0

是的,再次看到连接 - 并注意,没有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