2016-09-26 50 views
1
SELECT *, CASE 
    WHEN paydatefinal IS NULL OR paydatefinal = '0000-00-00' THEN paydate 
    ELSE paydatefinal END AS `paydatefinColumn` 
FROM 
    `ws_crm_comenzi` 
WHERE 
    `sezonId` = '4' 
AND `service_id` = '1' 
AND `finished` = '1' 
AND `paydatefinColumn`='2016-09-26' 
ORDER BY `paydatefinColumn` DESC 

我怎樣才能使一個並從塔(paydatefinColumn)是在的情況下,但在表中進行此列dose't存在MySQL查詢案件

+0

你不能......你必須重複相關的代碼。 – scaisEdge

+0

你是什麼意思 –

回答

1

由於生成列是相當長的,你不能在where子句中使用生成列,最簡單的也許是包裹了整個事情的另一選擇

SELECT * FROM (

    SELECT *, CASE 
     WHEN paydatefinal IS NULL OR paydatefinal = '0000-00-00' THEN paydate 
     ELSE paydatefinal END AS `paydatefinColumn` 
    FROM 
     `ws_crm_comenzi` 
    WHERE 
     `sezonId` = '4' 
    AND `service_id` = '1' 
    AND `finished` = '1' 
    AND `paydatefinColumn`='2016-09-26' 
    ORDER BY `paydatefinColumn` DESC) 

AS A WHERE paydatefinColumn = whatever 
0

你應該重複這樣的代碼

SELECT *, CASE 
     WHEN paydatefinal IS NULL OR paydatefinal = '0000-00-00' THEN paydate 
     ELSE paydatefinal END AS `paydatefinColumn` 
    FROM 
     `ws_crm_comenzi` 
    WHERE 
     `sezonId` = '4' 
    AND `service_id` = '1' 
    AND `finished` = '1' 
    AND (CASE 
     WHEN paydatefinal IS NULL OR paydatefinal = '0000-00-00' THEN paydate 
     ELSE paydatefinal END ) = str_toDate('2016-09-26', '%Y-%m-%d') 
    ORDER BY `paydatefinColumn` DESC 
0

你需要重複CASE語句的where子句中

SELECT *, CASE 
    WHEN paydatefinal IS NULL OR paydatefinal = '0000-00-00' THEN paydate 
    ELSE paydatefinal END AS `paydatefinColumn` 
FROM 
    `ws_crm_comenzi` 
WHERE 
    `sezonId` = '4' 
AND `service_id` = '1' 
AND `finished` = '1' 
AND 
CASE 
    WHEN paydatefinal IS NULL OR paydatefinal = '0000-00-00' THEN paydate 
    ELSE paydatefinal END='2016-09-26' 
ORDER BY `paydatefinColumn` DESC 
2

可以根本就通過在子查詢中添加它

SELECT * from (SELECT *, CASE WHEN paydatefinal IS NULL OR paydatefinal = '0000-00-00' 
THEN paydate 
ELSE 
paydatefinal END AS `paydatefinColumn` FROM `ws_crm_comenzi` WHERE `sezonId` = '4' AND `service_id` = '1' AND `finished` = '1')as TEMP 
where TEMP.paydatefinColumn='2016-09-26' ORDER BY TEMP.paydatefinColumn DESC;