【问题标题】:Yii2 condition with subquery带有子查询的 Yii2 条件
【发布时间】:2016-02-10 17:46:17
【问题描述】:

你如何在 Yii2 中编写这个 SQL 查询?

SELECT * FROM table
WHERE column1 IN (SELECT column2 FROM table WHERE column1 = 5)

【问题讨论】:

    标签: yii2 where-in sql-subselect


    【解决方案1】:

    假设您的模型名为 YourModel 代表名称为 table 的表。那么查询将是:

    $subQuery = YourModel::find()->select('column2')->where(['column1' => 5]);
    $query = YourModel::find()->where(['column1' => $subQuery]);
    $models = $query->all();
    

    之前还问过similar question

    【讨论】:

      【解决方案2】:
      Yii::$app->db->createCommand('SELECT * FROM table
             WHERE column1 IN (SELECT column2 FROM table WHERE column1 = :val)', [':val' => 5])->queryAll();
      

      将返回关联数组,如 ['id' => 1, 'name' => 'Victor']

      【讨论】:

        【解决方案3】:

        Yii2 子查询:

        $query=YourBaseModel::find()->select('p_id');
        $subquery=YourSubMOdel::find()->Where(['in','p_id',$query])->andWhere(['column1'=>1])->one();
        

        $query=>在 YourBaseModel 中选择 p_id 值。 p_id 值存储在 $query 变量中。然后检查 YourSubModel 中的 $query 值。

        【讨论】:

          【解决方案4】:

          你可以做到的:

          $query = 'SELECT * FROM table
                    WHERE column1 IN (SELECT column2 FROM table WHERE column1 = 5)';
          
          $list = $model::findBySql($query)->all();
          

          或者:

          $subquery = $model::find()->select('column1');
          $query = $model::find()->where(['not in',$subquery])->all();
          

          在这种情况下是一样的。 希望能帮到你

          【讨论】:

            【解决方案5】:

            这是解决您的问题的很多方法。 我举个最正确的例子,就使用yii2框架而言。

            SQL:

            SELECT * 
            FROM table 
            WHERE 
                column1 IN 
                (SELECT column2 
                    FROM table
                    WHERE column1 = 5)
            

            Yii2 活动记录:

            $subQuery = TableModel::find()->select('column2')->where(['column1' => 5]);
            $result = TableModel::find()->where(['IN', 'column1', $subQuery])->all();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-28
              • 2021-12-27
              • 2012-12-04
              • 2012-03-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多