【发布时间】: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