2013-03-22 6 views
6

私はエラーがあり、このコードを使用しています:SET変数を - MySQLの

SET @rejects = ''; 

SELECT * 
FROM list 
WHERE maker = 1 
    AND by_ids IN ('10','11') 
    AND country LIKE '%I%' 
    AND (
     src IS NULL 
     || src NOT IN (@rejects) 
     AND checkSrc(src) = 'yes' 
     AND SET @rejects = CONCAT(@rejects,',',src) 
    ); 

問題を引き起こしていますか?

+0

by_ids INT('10 '、'11') 'から' by_ids IN('10 '、' 11 ') 'になりますか? – fedorqui

+0

WHERE句でなぜ 'AND AND @rejects = CONCAT(@rejects、 '、'、src)'を設定するのですか? –

+0

それは私が望むもの、私は@rejects変数に検索された各srcの値をconcatしたい。 –

答えて

2

次に、このようなクエリを書くことができます。

SET @rejects = ''; 
SELECT @rejects = CONCAT(@rejects,',',src) FROM list WHERE maker = 1 AND by_ids IN ('10','11') AND country LIKE '%I%' AND 
(src IS NULL OR src NOT IN (@rejects) AND checkSrc(src) = 'yes'); 
SELECT @rejects; 
+1

申し訳ありませんが、それはどのように動作しません –

+0

あなたの予想される出力は?また、srcがnullの場合、問題が発生する可能性があります。あなたはあなたのテーブル構造と期待される出力を投稿できますか? –

5

問題は、あなたが1つのステートメントでselectsetを混在させることができないということです、確実に構文エラーがあります:

select*from t where 1 and [email protected]=1; 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[email protected]=1' at line 1

あなたはselectsetを行いたい場合は、the colon equalsを使用構文。

create table t(id int); insert t values(1),(2),(3); 
[email protected]=0; 
[email protected]:=id from t; 
+--------+ 
| @a:=id | 
+--------+ 
|  1 | 
|  2 | 
|  3 | 
+--------+ 

そして、あなたもconcatを行うことができます:ここでは、各行時に変数を更新する方法です

select*,@a:=1 from t where 1; 

select*from t where 1 and [email protected]=1; 

:これを変更大手0なし

[email protected]='0'; 
select @a:=concat(@a,',',id)from t; 
+-----------------------+ 
| @a:=concat(@a,',',id) | 
+-----------------------+ 
| 0,1     | 
| 0,1,2     | 
| 0,1,2,3    | 
+-----------------------+ 

またはconcat:しかし

[email protected]=''; 
select @a:=concat(@a,if(@a='','',','),id)from t; 
+------------------------------------+ 
| @a:=concat(@a,if(@a='','',','),id) | 
+------------------------------------+ 
| 1         | 
| 1,2        | 
| 1,2,3        | 
+------------------------------------+ 

、これは危険であることを手動明示的状態:これもされていlink

...you should never assign a value to a user variable and read the value within the same statement...

...you might get the results you expect, but this is not guaranteed.

...the order of evaluation for expressions involving user variables is undefined.

言及したon Xaprb

最後に、気味悪い変数に異なる値の種類を割り当てるなど、複雑なメカニズムを理解していることを確認する場合は、checkout the manualなどがあります。

関連する問題