【问题标题】:How to perform subquery where subquery returns more than one row?如何在子查询返回多行的情况下执行子查询?
【发布时间】:2014-04-30 14:41:16
【问题描述】:

我正在尝试搜索一个表中的所有条目,其中一列与另一列中的条目相匹配,该条目位于 - 之前

示例输出:

这是我试过的查询,它返回了“查询错误(1242):子查询返回超过1行”的错误

 SELECT * FROM table1 
    WHERE
      table1.Column1 = (
        SELECT
          SUBSTRING_INDEX(table2.Column1,'-',1) 
        FROM
          table2 
        WHERE
          table2.column1 LIKE '%\-%'
      );

【问题讨论】:

    标签: mysql sql subquery


    【解决方案1】:

    您可以在 WHERE 子句中使用 IN

    SELECT * FROM table1 
    WHERE
      table1.Column1 IN (
        SELECT
          SUBSTRING_INDEX(table2.Column1,'-',1) 
        FROM
          table2 
        WHERE
          table2.column1 LIKE '%\-%'
      );
    

    【讨论】:

      【解决方案2】:

      另一种方式是使用JOIN as

      SELECT * FROM table1 t1
      inner join (
        SELECT
        SUBSTRING_INDEX(table2.Column1,'-',1) as str
        FROM
        table2 
        WHERE
        table2.column1 LIKE '%\-%'
      )t2
      on
      t1.column1 = t2.str
      ;
      

      DEMO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        相关资源
        最近更新 更多