【问题标题】:Mysql Select within IF conditionMysql 在 IF 条件下选择
【发布时间】:2011-06-21 15:42:24
【问题描述】:

希望执行在特定条件下从另一个表中获取数据的查询。

喜欢

select field1, field2.... IF(fieldX=3,select value from sub_table where cat_id = 3 order by id desc limit 0,1, NULL) from abc ;

if 中的查询有效。 我习惯于在没有任何问题的情况下实现 if 条件,但这些都是针对某些静态值或字段的。但是,这是我第一次尝试在 if 并且无法做到这一点时获得选择的结果。

这种情况是因为对于“fieldX”的某些特定值,我需要从另一个表中获取记录。

问候 朱奈德

【问题讨论】:

    标签: mysql select if-statement conditional-statements


    【解决方案1】:

    将你的内部选择包裹在 ( ) 中

    IF(fieldX=3, (select value from sub_table where cat_id = 3 order by id desc limit 0,1), NULL)
    

    【讨论】:

    • 哦,你不需要限制 0,1 如果你只想要一条记录,只需限制 1 就可以了
    • 这个 imo 是这个问题的完美答案。
    【解决方案2】:

    为什么不使用左连接并使用fieldX=3 作为连接条件?如果 fieldX 不是 3,sql 用NULL 填充字段

    select a.field1, a.field2, sub.value
    from abc a
    left join
    (
      select value from sub_table
      where cat_id = 3
      limit 0,1
    ) sub
    on a.fieldX = 3
    

    或者,如果您确实想获取对应值的所有行(我看到您有cat_id = 3fieldX = 3,所以基本上是cat_id = fieldX),只需使用简单的连接即可。无需使用复杂的 if 构造。 sql 旨在进行快速高效的连接:

    select a.field1, a.field2, sub.value
    from abc a
    left join sub_table sub
    on a.fieldX = sub.cat_id
    

    但请注意,当 fieldX 和 cat_id 之间有更多匹配项(非唯一 cat_id)时,第二个查询将返回多行

    【讨论】:

      【解决方案3】:

      你可以这样做:

      select fields... from sub_table st
      where st.idSubTable in(
      Select IF(fieldX=3
      ,(
        select st.idSubTable from sub_table where cat_id = 3 order by id desc limit 0,1
       ),
        NULL)
       from abc);
      

      它会解决你的问题。

      【讨论】:

        猜你喜欢
        • 2021-10-26
        • 1970-01-01
        • 2013-09-26
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 2021-07-06
        相关资源
        最近更新 更多