代码之家  ›  专栏  ›  技术社区  ›  Nathan H

mysql“is in”等价?

  •  6
  • Nathan H  · 技术社区  · 14 年前

    不久前,我在一个MS-SQL项目上工作,我记得有一个“正在”的东西。我在一个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实现这一点(同时努力提高效率)?

    2 回复  |  直到 14 年前
        1
  •  15
  •   davidtbernal    14 年前

    你在找 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)
    
        2
  •  2
  •   nickf    14 年前

    尝试 IN (没有“是”)