2012-05-09 29 views
1

我有以下查詢:MySQL的右連接,其中一個上子句返回空

SELECT * FROM my_users as U 
RIGHT JOIN subscribers AS S ON S.userid = U.user_id 
WHERE S.approved > 0 AND S.channel_id = 1 AND S.alert_level >= 90 

如果我脫下最後AND子句(AND S.alert_level> = 90)搜索工程完全按照預期。留下最後一個AND子句,我得到一個空的結果集。

顯然,我檢查了訂戶表,以確保返回的用戶標識具有正確的alert_level,並且它們都具有90個,因此應該返回2個用戶...而S.alert_level是smallint(6)。

我在這裏錯過了一些明顯的東西嗎?

謝謝!

+2

這聽起來很奇怪。你說你「檢查了訂戶表,以確保將被返回的用戶標識符有正確的alert_level」,但爲什麼你需要這樣做呢?當您嘗試「取消最後一個AND子句(AND S.alert_level> = 90)時,您應該已經能夠看到alert_level了,搜索完全按照預期工作。」你不覺得要檢查嗎?你現在可以檢查它嗎? –

+0

砰!是的......它只需要另一雙眼睛! – ppetree

+0

如果您想編輯和/或接受它,我會轉貼作爲回答。 –

回答

1

檢查該查詢的結果:

SELECT * FROM my_users as U 
RIGHT JOIN subscribers AS S ON S.userid = U.user_id 
WHERE S.approved > 0 AND S.channel_id = 1 

注意一點將返回在結果集的每一行的S.alert_level值。這可能不會超過90.這就解釋了爲什麼添加最後一個條件不會給你任何行。

相關問題