Как сравнить столбцы друг с другом в условиях запроса? - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь создать запрос с подзапросом в cakePHP 3.5, но он не соответствует ожидаемому, пожалуйста, найдите подробности ниже и помогите мне решить его.

SQL: -

$sql = '
    SELECT 
    t1.id, t1.code, t1.description, t1.customer_id, t1.delivery_date
    (
        SELECT SUM(t2.quantity) AS completed 
        FROM table2 AS t2 
        WHERE t2.customer_id = t1.customer_id 
        AND t2.delivery_date = t1.delivery_date 
    ) AS completed 
    FROM table1 AS t1
';

это запрос, который я хочу построить с CakePHP ORM

Запрос CakePHP: -

Я попробовал приведенный ниже код для выполнения моего запроса

$data = $this->Table1->query->select([
    't1.id', 
    't1.code', 
    't1.description', 
    't1.customer_id', 
    't1.delivery_location_id', 
    'completed' => $this->Table2->find()->select([
        'completed' => 'SUM(Table2.quantity)'
    ])->where([
        'Table2.customer_id' => 'Table1.customer_id',
        'Table2.delivery_location_id' => 'Table1.delivery_location_id'
    ])
]);

Фактический результат: -

Это мой факт из CakePHP ORM, вы можете видеть, что он имеет 0 в условии WHERE подзапроса.

SELECT 
  Table1.id AS `Table1__id`, 
  Table1.code AS `Table1__code`, 
  Table1.description AS `Table1__description`, 
  Table1.customer_id AS `Table1__customer_id`, 
  Table1.delivery_location_id AS `Table1__delivery_location_id`,
  (
    SELECT 
      sum(
        Table2.quantity
      ) AS `completed` 
    FROM 
      table2 Table2 
    WHERE (
      Table2.customer_id = 0 
      AND Table2.delivery_location_id = 0 
    )
  ) AS `completed`, 
FROM 
  table1 Table1 
LIMIT 
  10 OFFSET 0

Ожидаемый результат: -

Я ожидаю, что результат должен быть, как показано ниже.

SELECT 
  Table1.id AS `Table1__id`, 
  Table1.code AS `Table1__code`, 
  Table1.description AS `Table1__description`, 
  Table1.customer_id AS `Table1__customer_id`, 
  Table1.delivery_location_id AS `Table1__delivery_location_id`,
  (
    SELECT 
      sum(
        Table2.quantity
      ) AS `completed` 
    FROM 
      table2 Table2 
    WHERE (
      Table2.customer_id = Table1.customer_id 
      AND Table2.delivery_location_id = Table1.delivery_location_id 
    )
  ) AS `completed`, 
FROM 
  table1 Table1 
LIMIT 
  10 OFFSET 0
...