【问题标题】:MySQL "IS IN" equivalent?MySQL“IS IN”等效?
【发布时间】:2011-02-08 15:20:44
【问题描述】:

前段时间我在一个 MS-SQL 项目上工作,我记得一个“IS IN”的东西。我在一个 MySQL 项目上尝试过,但没有成功。

有没有等价物?解决方法?

这是我尝试运行的完整查询:

SELECT *
FROM product_product, product_viewhistory, product_xref
WHERE 
(
(product_viewhistory.productId = product_xref.product_id_1 AND product_xref.product_id_2 = product_product.id)
OR 
(product_viewhistory.productId = product_xref.product_id_2 AND product_xref.product_id_1 = product_product.id)
)
AND product_product.id IS IN 
    (SELECT DISTINCT pvh.productId
    FROM product_viewhistory AS pvh
    WHERE pvh.cookieId = :cookieId
    ORDER BY pvh.viewTime DESC
    LIMIT 10)
AND product_viewhistory.cookieId = :cookieId
AND product_product.outofstock='N'
ORDER BY product_xref.hits DESC
LIMIT 10

它很大……但我感兴趣的部分是:

AND product_product.id IS IN 
    (SELECT DISTINCT pvh.productId
    FROM product_viewhistory AS pvh
    WHERE pvh.cookieId = :cookieId
    ORDER BY pvh.viewTime DESC
    LIMIT 10)

这基本上是说我希望产品进入该子查询的“前 10 名”。

您将如何使用 MySQL 实现这一目标(同时努力提高效率)?

【问题讨论】:

  • 不是和 MySQL 中的 'in' 一样吗?
  • IN 是您要查找的内容,但这实际上应该使用 JOIN 而不是子查询来实现。
  • 请就“JOIN”提出建议。因为无论如何mysql不允许在“IN”中使用“LIMIT”。所以我可能不得不加入?
  • 我想我明白了,谢谢

标签: sql mysql sql-server


【解决方案1】:

你在找IN

AND product_product.id IN 
    (SELECT DISTINCT pvh.productId
    FROM product_viewhistory AS pvh
    WHERE pvh.cookieId = :cookieId
    ORDER BY pvh.viewTime DESC
    LIMIT 10)

【讨论】:

  • "这个版本的 MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'"。我想这是另一个问题...
【解决方案2】:

试试IN(没有“是”)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    相关资源
    最近更新 更多