簡體   English   中英

未知列where子句

[英]Unknown column where clause

我有以下DQL查詢

SELECT
    ps.id,
    MAX(ps.dueDate) as due_date,
    u.firstName as first_name,
    u.lastName as last_name,
    u.email,
    IDENTITY(ps.loanApplication) as loan_application_id,
    DATE_DIFF(MAX(ps.dueDate), CURRENT_DATE()) as diff
FROM
    Loan\Entity\PaymentSchedule ps
LEFT JOIN
    ps.paymentType pt
LEFT JOIN
    ps.loanApplication la
LEFT JOIN
    la.status s
LEFT JOIN
    la.user u
WHERE
    pt.slug != :paymentSlug AND s.keyIdentifier = :status AND diff = 14
GROUP BY
    ps.loanApplication

轉換為以下SQL查詢

SELECT
    p0_.id AS id_0,
    MAX(p0_.due_date) AS sclr_1,
    u1_.first_name AS first_name_2,
    u1_.last_name AS last_name_3,
    u1_.email AS email_4,
    p0_.loan_application_id AS sclr_5,
    DATEDIFF(MAX(p0_.due_date), CURRENT_DATE) AS sclr_6 
FROM
    payment_schedule p0_
LEFT JOIN
    payment_type p2_ ON p0_.payment_type_id = p2_.id
LEFT JOIN
    loan_application l3_ ON p0_.loan_application_id = l3_.id
LEFT JOIN 
    loan_application_status l4_ ON l3_.loan_application_status_id = l4_.id
LEFT JOIN
    user u1_ ON l3_.user_id = u1_.id
WHERE
    p2_.slug <> ? AND l4_.key_identifier = ? AND sclr_6 = 14
GROUP BY
    p0_.loan_application_id

這給我以下錯誤

======================================================================
 PDOException
 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'sclr_6' in 'where clause'
----------------------------------------------------------------------

當我更換WHERE條件時

WHERE pt.slug != :paymentSlug AND s.keyIdentifier = :status AND diff = 14

WHERE pt.slug != :paymentSlug AND s.keyIdentifier = :status

它可以完美運行並向我顯示正確的記錄,我也嘗試了以下條件

WHERE pt.slug != :paymentSlug AND s.keyIdentifier = :status AND DATE_DIFF(MAX(ps.dueDate), CURRENT_DATE()) = :days_diff

WHERE pt.slug != :paymentSlug AND s.keyIdentifier = :status HAVING (DATE_DIFF(MAX(ps.dueDate), CURRENT_DATE())) = :days_diff

上面的WHERE也不起作用,我在這里想念什么?

謝謝。

如果要在WHERE子句中使用別名,則需要一個sub-select

select *
from 
(SELECT
    p0_.id AS id_0,
    MAX(p0_.due_date) AS sclr_1,
    u1_.first_name AS first_name_2,
    u1_.last_name AS last_name_3,
    u1_.email AS email_4,
    p0_.loan_application_id AS sclr_5,
    DATEDIFF(MAX(p0_.due_date), CURRENT_DATE) AS sclr_6 
FROM
    payment_schedule p0_
LEFT JOIN
    payment_type p2_ ON p0_.payment_type_id = p2_.id
LEFT JOIN
    loan_application l3_ ON p0_.loan_application_id = l3_.id
LEFT JOIN 
    loan_application_status l4_ ON l3_.loan_application_status_id = l4_.id
LEFT JOIN
    user u1_ ON l3_.user_id = u1_.id
) A
WHERE
    slug <> ? AND key_identifier = ? AND sclr_6 = 14

這是邏輯上處理查詢的方式

FROM clause
WHERE clause
SELECT clause
GROUP BY clause
HAVING clause
ORDER BY clause

由於Where Select之前先出現”,因此您不能在“ Where子句中使用alias name

您不能在WHERE子句中使用別名(在最終結果字段中)。 但是,至少在MySQL中,您可以使用HAVING子句而不需要GROUP BY

您使用的表達式是聚合的結果。 替換添加一個having子句,使查詢看起來像;

SELECT . . .
WHERE p2_.slug <> ? AND l4_.key_identifier = ? 
GROUP BY p0_.loan_application_id
HAVING sclr_6 = 14

注意date_diff()在MySQL中不是一個函數。 您打算使用datediff()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM