mysql - 别名导致 where 子句出错 - MySQL

标签 mysql sql where-clause

我的 SQL 代码:

SELECT (
           SELECT COUNT(1)
           FROM   FAVORI_DUALAR
           WHERE  DuaID       = D.DuaID
                  AND PID     = 'L3FNCPEVME36'
       )       AS Eklimi,
       (
           SELECT COUNT(1)
           FROM   EDILEN_DUALAR
           WHERE  DuaID       = D.DuaID
                  AND PID     = 'L3FNCPEVME36'
       )       AS Okudum,
       D.Tarih,
       D.DuaID,
       D.DuaBaslik,
       D.DuaTuru,
       D.DuaSayisiSiniri,
       D.DuaIcerik,
       D.DuaMeal,
       D.DuaArapca,
       D.PID,
       (
           SELECT COUNT(1)
           FROM   EDILEN_DUALAR
           WHERE  DuaID = D.DuaID
       )       AS Okundu
FROM   DUALAR     D
WHERE  D.Aktif = '1'
       AND (D.DuaTuru = 2 OR D.DuaTuru = 1 AND Okudum = 0)
ORDER BY
       D.Tarih DESC 
       LIMIT 9

Error : #1054 - Unknown column 'Okudum' in 'where clause'

我写的

SELECT COUNT(1)
FROM   EDILEN_DUALAR
WHERE  DuaID       = D.DuaID
       AND PID     = 'L3FNCPEVME36') AS Okudum

但我仍然在查询中收到错误。

最佳答案

您的 Okudum 字段是查询中的计算字段。这个不能直接引用(只能在ORDER BY中)。

因此您可以在 where 子句中使用:

WHERE ... AND (SELECT COUNT(1) FROM   EDILEN_DUALAR WHERE DuaID = D.DuaID AND PID = 'L3FNCPEVME36') = 0

或者你可以创建一个子查询: 使用 EDILEN_DUALAR 作为子查询进行联接。

SELECT (
           SELECT COUNT(1)
           FROM   FAVORI_DUALAR
           WHERE  DuaID       = D.DuaID
                  AND PID     = 'L3FNCPEVME36'
       )       AS Eklimi,
       ED.Okudum,
       D.Tarih,
       D.DuaID,
       D.DuaBaslik,
       D.DuaTuru,
       D.DuaSayisiSiniri,
       D.DuaIcerik,
       D.DuaMeal,
       D.DuaArapca,
       D.PID,
       (
           SELECT COUNT(1)
           FROM   EDILEN_DUALAR
           WHERE  DuaID = D.DuaID
       )       AS Okundu
, D.Aktif
FROM   DUALAR D LEFT JOIN
    (SELECT DuaID, COUNT(1) AS Okudum
           FROM   EDILEN_DUALAR
           WHERE  PID     = 'L3FNCPEVME36'
                  GROUP BY DuaID       ) ED

ON ED.DuaID = D.DuaID
WHERE   D.Aktif = '1'
       AND (D.DuaTuru = 2 OR D.DuaTuru = 1 AND (ED.Okudum IS NULL OR ED.Okudum = 0))
ORDER BY
       D.Tarih DESC 

关于mysql - 别名导致 where 子句出错 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567733/

相关文章:

php - 数字字符阻止 MySQL 中成功的 SELECT

mysql - 从 O'Reilly Media 的 "Learning SQL"加载示例数据库中的错误消息

c# - 在 Entity Framework 的动态 dbset 中使用 where 子句

mysql - 计算 MySQL 中另一列的特定值在一列上重复值的数量?

mysql - MySQL 中的交叉/外部应用

python - 尝试 INSERT 到 MySQL 时不断出现错误

mysql - SQL 数据库函数

sql - FTS(全文搜索)sqlite如何实现FTS表?

mysql - 如何检查参数值与mysql中的哪条记录匹配

powershell - 使用字符串数组在 PowerShell 中的 Where-Object 中进行比较