【问题标题】:Below query doesnt give me expected result please help me out下面的查询没有给我预期的结果请帮助我
【发布时间】:2010-12-30 07:19:29
【问题描述】:

选择查询必须为它获得的每个值显示单独的行 但是在执行这个查询时,它只会从 IN 子句中使用的子查询中产生第一个值。

    SELECT prod_id FROM tbl_product WHERE tbl_product.prod_status = 1 AND 
tbl_product.is_excluded = 0 AND tbl_product.prod_stock_qty > 0 
AND tbl_product.prod_id IN (SELECT rel_prod_ids 
FROM tbl_product_relations WHERE prod_id = '6058')

子查询产生逗号分隔值

有人可以帮我找出解决办法吗?

【问题讨论】:

  • 您能发布您的表格定义吗?
  • rel_prod_ids 的类型是什么?如果你单独运行子查询,它的回报是什么?
  • @om-the-eternity 什么 CSV?什么时候 CSV?请用更多细节重写您的问题。

标签: mysql subquery in-subquery


【解决方案1】:

你需要的是find_in_set

select find_in_set(123, '123,12345,123456');  <-- return 1
select find_in_set(123, '1234,12345,123456'); <-- return 0

这个功能很慢,要小心性能...

【讨论】:

    【解决方案2】:

    使用JOIN 而不是IN

    SELECT p.prod_id
    FROM tbl_product p JOIN tbl_product_relations pr ON p.prod_id = pr.rel_prod_ids
    WHERE p.prod_status = 1
        AND p.is_excluded = 0
        AND p.prod_stock_qty > 0
        AND r.prod_id = '6058'
    

    【讨论】:

    • 我从子查询中获取了 CSV,所以我不能使用 JOIN
    • 你的 cmets 没有解释为什么你不能使用 join,这个 join 查询看起来不错。
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多