亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL語法錯誤消息“操作數應包含1列”

MySQL語法錯誤消息“操作數應包含1列”

收到一只叮咚 2019-09-06 16:07:49
我嘗試運行以下語句:INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION)SELECT (a.number, b.ID, b.DENOMINATION) FROM temp_cheques a, BOOK bWHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;根據我的理解,應該從temp_cheques中插入VOUCHER中的每個記錄,其ID和DENOMINATION字段對應于BOOK表中的條目(temp_cheques來自數據庫備份,我試圖以不同的格式重新創建)。但是,當我運行它時,我收到一個錯誤:Error: Operand should contain 1 column(s)SQLState:  21000ErrorCode: 1241我在SQuirrel中運行它并且沒有遇到任何其他查詢的問題。我的查詢語法有問題嗎?編輯:BOOK的結構是:ID  int(11)START_NUMBER    int(11)UNITS   int(11)DENOMINATION    double(5,2)temp_cheques的結構是:ID  int(11)number  varchar(20)
查看完整描述

3 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

嘗試從SELECT子句中刪除括號。從Microsoft TechNet,使用SELECT子句的INSERT語句的正確語法如下。


INSERT INTO MyTable  (PriKey, Description)

       SELECT ForeignKey, Description

       FROM SomeView

你得到的錯誤,“SELECT將檢查超過MAX_JOIN_SIZE行;檢查你的WHERE并使用SET SQL_BIG_SELECTS = 1或SET SQL_MAX_JOIN_SIZE =#如果SELECT沒問題?!?,實際上是正確的,假設你有兩行BOOK和temp_cheques。您正在嘗試查詢兩個表中的所有行并進行交叉引用,從而產生m * n大小的查詢。在執行可能很長的操作之前,SQL Server正試圖警告您。


SQL_BIG_SELECTS在運行此語句之前設置= 1,然后重試。它應該工作,但請注意,此操作可能需要很長時間。


查看完整回答
反對 回復 2019-09-06
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

B是否包含UNITS列?

temp_cheques和Book的表結構是什么?

在進行+/-和比較時,所有列都應該是數字。

以下簡單的SELECT是否有效?

SELECT b.START_NUMBER+b.UNITS-1 FROM Books B


查看完整回答
反對 回復 2019-09-06
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

查詢的最終版本如下:


Set SQL_BIG_SELECTS = 1;

INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION)

SELECT a.number, b.ID, b.DENOMINATION

FROM temp_cheques a, BOOK b

WHERE a.number BETWEEN b.START_NUMBER AND (b.START_NUMBER+b.UNITS-1);

BETWEEN語句的解析需要括號,SELECT沒有,并且由于兩個表的大?。╰emp_cheques中的215000條記錄,BOOK中的8000條),我打破了選擇大小的限制,要求我設置SQL_BIG_SELECTS = 1 。


查看完整回答
反對 回復 2019-09-06
  • 3 回答
  • 0 關注
  • 1129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號