使用选择和案例条件插入

时间:2014-01-16 14:52:50

标签: mysql

任何人都可以告诉我这个查询似乎有什么问题=>>>

$betrates = "";
        for ($i = 1; $i <= 49; $i++) {
            $betrates = $betrates . ", betrate{$i}";
        }

$betratesDecrease = "";
        for ($i = 1; $i <= 49; $i++) {
            $betratesDecrease = $betratesDecrease . ", betrate{$i} + {$decrease}";
        }

$query = "INSERT into tbl_betrate (userID, gametype, platetype, betgroup {$betrates})
                 Select '$userID', gametype, platetype, betgroup 
                    Case
                     When gametype = 1 AND (betgroup = 1 OR betgroup = 2)
                      Then {$betratesDecrease}
                      Else {$betrates}  
                 END
                 from tbl_betrate
                 WHERE NOT EXISTS (SELECT 1 FROM tbl_betrate WHERE userID = '$userID') AND tbl_betrate.userID = '$papaUserId'";

这是我得到的错误=&gt;&gt;&gt;

  

CDbCommand无法执行SQL语句:SQLSTATE [42000]:   语法错误或访问冲突:1064 SQL中有错误   句法;查看与MySQL服务器版本对应的手册   在'gametype,platetype,betgroup附近使用正确的语法,   betrate1 +'0.5',betrate2 +'0.5',betrate3 +'在第5行。

执行的SQL语句是:

INSERT into tbl_betrate (userID, gametype, platetype, betgroup , betrate1, betrate2, betrate3, betrate4, betrate5, betrate6, betrate7, betrate8, betrate9, betrate10, betrate11, betrate12, betrate13, betrate14, betrate15, betrate16, betrate17, betrate18, betrate19, betrate20, betrate21, betrate22, betrate23, betrate24, betrate25, betrate26, betrate27, betrate28, betrate29, betrate30, betrate31, betrate32, betrate33, betrate34, betrate35, betrate36, betrate37, betrate38, betrate39, betrate40, betrate41, betrate42, betrate43, betrate44, betrate45, betrate46, betrate47, betrate48, betrate49)
Select 
Case
When gametype = '1' AND (betgroup = '1' OR betgroup = '2')
Then 'sHolder1', gametype, platetype, betgroup , betrate1 + '0.5', betrate2 + '0.5', betrate3 + '0.5', betrate4 + '0.5', betrate5 + '0.5', betrate6 + '0.5', betrate7 + '0.5', betrate8 + '0.5', betrate9 + '0.5', betrate10 + '0.5', betrate11 + '0.5', betrate12 + '0.5', betrate13 + '0.5', betrate14 + '0.5', betrate15 + '0.5', betrate16 + '0.5', betrate17 + '0.5', betrate18 + '0.5', betrate19 + '0.5', betrate20 + '0.5', betrate21 + '0.5', betrate22 + '0.5', betrate23 + '0.5', betrate24 + '0.5', betrate25 + '0.5', betrate26 + '0.5', betrate27 + '0.5', betrate28 + '0.5', betrate29 + '0.5', betrate30 + '0.5', betrate31 + '0.5', betrate32 + '0.5', betrate33 + '0.5', betrate34 + '0.5', betrate35 + '0.5', betrate36 + '0.5', betrate37 + '0.5', betrate38 + '0.5', betrate39 + '0.5', betrate40 + '0.5', betrate41 + '0.5', betrate42 + '0.5', betrate43 + '0.5', betrate44 `enter code here`+ '0.5', betrate45 + '0.5', betrate46 + '0.5', betrate47 + '0.5', betrate48 + '0.5', betrate49 + '0.5'
Else 'sHolder1', gametype, platetype, betgroup , betrate1, betrate2, betrate3, betrate4, betrate5, betrate6, betrate7, betrate8, betrate9, betrate10, betrate11, betrate12, betrate13, betrate14, betrate15, betrate16, betrate17, betrate18, betrate19, betrate20, betrate21, betrate22, betrate23, betrate24, betrate25, betrate26, betrate27, betrate28, betrate29, betrate30, betrate31, betrate32, betrate33, betrate34, betrate35, betrate36, betrate37, betrate38, betrate39, betrate40, betrate41, betrate42, betrate43, betrate44, betrate45, betrate46, betrate47, betrate48, betrate49 
END
from tbl_betrate
WHERE NOT EXISTS (SELECT 1 FROM tbl_betrate WHERE userID = 'sHolder1') AND tbl_betrate.userID = 'company'

1 个答案:

答案 0 :(得分:0)

case一次只对一个变量起作用。你需要重复这个条件:

INSERT into tbl_betrate (userID, gametype, platetype, betgroup , betrate1, betrate2, betrate3, betrate4, betrate5, betrate6, betrate7, betrate8, betrate9, betrate10, betrate11, betrate12, betrate13, betrate14, betrate15, betrate16, betrate17, betrate18, betrate19, betrate20, betrate21, betrate22, betrate23, betrate24, betrate25, betrate26, betrate27, betrate28, betrate29, betrate30, betrate31, betrate32, betrate33, betrate34, betrate35, betrate36, betrate37, betrate38, betrate39, betrate40, betrate41, betrate42, betrate43, betrate44, betrate45, betrate46, betrate47, betrate48, betrate49)
    Select 'sHolder1',gametype, platetype, betgroup , betrate1 + inc, betrate2 + inc,
           betrate3 + inc, betrate4 + inc, betrate5 + inc, betrate6 + inc, betrate7 + inc,
           betrate8 + inc, betrate9 + inc, betrate10 + '0.5', betrate11 + '0.5', betrate12 + '0.5',
           . . .
   from (select b.*,
             (Case When gametype = '1' AND (betgroup = '1' OR betgroup = '2')
                   then '0.5'
                   else ''
              end) as inc
      from tbl_betrate b
     ) b
WHERE NOT EXISTS (SELECT 1 FROM tbl_betrate WHERE userID = 'sHolder1') AND tbl_betrate.userID = 'company'