Mysql

where子句在視圖mysql中返回空行

  • July 29, 2016

我有兩個表,其架構如下:

INCOME TABLE:
INCOME_ID, INCOME_NAME, INCOME_DATE

OUTCOME TABLE:
OUTCOME_ID, OUTCOME_NAME, OUTCOME_DATE

EXAMPLE DATA INCOME
INCOME_ID | INCOME_NAME | INCOME_DATE
1         | FIRST EXMPL | 24-07-2016
2         | SEC EXAMPLE | 25-07-2016
ETC
EXAMPLE DATA OUTCOME
OUTCOME_ID | OUTCOME_NAME | OUTCOME_DATE
1          | FIRST        | 24-07-2016
2          | SEC          | 03-08-2016
ETC

所以我使用 union all 來組合這些表

SELECT INCOME_DATE AS DATE, INCOME_NAME AS NAME FROM INCOME
UNION ALL
SELECT OUTCOME_DATE, OUTCOME NAME FROM OUTCOME

我使用上面的查詢來創建視圖

CREATE VIEW V_BALANCE AS SELECT INCOME_DATE AS DATE, INCOME_NAME AS NAME
UNION ALL
SELECT OUTCOME_DATE, OUTCOME_NAME FROM OUTCOME

視圖已成功創建,但是當我想在視圖中添加 where 子句時,它返回空行

SELECT * FROM V_BALANCE WHERE DATE BETWEEN = '24-07-2016' AND '03-08-2016'

假設這兩個日期列確實是DATE列,問題是您沒有在日期文字中使用正確的格式。使用 ANSI 格式:

SELECT * 
FROM V_BALANCE 
WHERE DATE BETWEEN '2016-07-24' 
              AND '2016-08-03' ;

有關其他選項,請參閱文件:日期和時間文字


如果兩個日期列不是DATEsome CHARor VARCHAR,那麼問題就在那裡。將列轉換為正確的日期類型,否則比較將不正確。

您的程式碼中有錯字:

你寫了

  • SELECT * FROM V_BALANCE WHERE DATE BETWEEN = '24-07-2016' AND '03-08-2016'

而你應該寫

  • SELECT * FROM V_BALANCE WHERE DATE BETWEEN '24-07-2016' AND '03-08-2016'

我知道當你回讀程式碼時,這種事情很難被發現。我也沒有看到 - 我必須在我的客戶出現錯誤之前創建視圖並實際執行您的命令。

您的客戶端工具應該就這麼明顯的事情向您發出警告。

建議 - 也許你應該看看改變客戶端工具?ps 歡迎來到論壇。

引用自:https://dba.stackexchange.com/questions/145275