2011-12-21 9 views
0

これは私のクエリです:UNION ALLは、1つのサブクエリが結果を検出しなかった場合にエラーを返しますか?

SELECT UID, COUNT(*) *100 AS Points 
FROM `Visited` 
WHERE UID = '25' 
UNION ALL 
SELECT UID, COUNT(*) *1000 AS Points 
FROM `Sites` 
WHERE UID = '25' 
UNION ALL 
SELECT UID, COUNT(*) *1000 AS Points 
FROM `userTags` 
WHERE UID = '25' 

私はそれを実行し、サブクエリの一つは、私が手に何も結果が見つからないときは:

#1048 - Column 'UID' cannot be null 

私は本当にというサブクエリを実行し、問題を理解していません

UID | POINTS 
NULL 0 

ただし、大きなクエリでは何らかの理由で結合されません。理由は何でしょうか? 3つのサブクエリは、結果が得られた場合

---- EDIT

はまた、クエリが正常に動作します。唯一の問題は、その中に結果がないことです。

+0

このエラーが発生したときに、パラメータ '$のuid'としてどのような値を指定しているが存在しない可能性があると思う場合

はあまりにも他のテーブルのために同じことをしますか? – Bohemian

+0

整数です – lisovaccaro

+0

あなたのコードから '$ uid'を' null'にできますか? – Bohemian

答えて

0

​​に一致する行がないように見えますが、COUNT(*)はまだ一致する行が0であることを返します。あなたが外を使用して行を削除するUIDがnullでない場所を選択し、またはより簡単にNULLを置き換える、次のように次のいずれかです。もちろん

SELECT UID, COUNT(*) *100 AS Points 
FROM `Visited` 
WHERE UID = '25' 
UNION ALL 
SELECT ifnull(UID, '25'), COUNT(*) *1000 AS Points 
FROM `Sites` 
WHERE UID = '25' 
UNION ALL 
SELECT UID, COUNT(*) *1000 AS Points 
FROM `userTags` 
WHERE UID = '25'; 

、あなたのコードから実行するため$uid'25'を置き換えます。あなたが一致する行

関連する問題