我有2個查詢顯示2個不同的值,但來自一個查詢的結果是意外的。MySQL與WHERE子句連接
查詢1:
SELECT SUM(T.amount_reward_user) AS total_grouping
FROM fem_user_cards UC
LEFT JOIN fem_transactions T USING(card_number)
LEFT JOIN fem_company_login FCL
ON T.fem_company_login_id=FCL.fem_company_login_id
WHERE UC.fem_user_login_id=193
AND FCL.grouping<>0 AND T.from_group=1 AND T.authorised=1
GROUP BY UC.fem_user_login_id
上述查詢給我的總回報金額的用戶193.這裏的條件是我收到了該查詢必須來自該組的獎勵金額是顯而易見的來自T.from_group = 1。所以這似乎是正確的。
QUERY2:
SELECT SUM(T.amount_reward_user) AS total_grouping
FROM fem_transactions T
LEFT JOIN fem_company_login FCL
ON T.fem_company_login_id=FCL.fem_company_login_id
WHERE T.fem_user_login_id=193
AND FCL.grouping<>0 AND T.from_group=1 AND T.authorised=1
在該查詢中,即使T.from_group = 1它被從T.from_group = 0相加的獎勵量爲好。有誰知道問題是什麼?
例如:
用戶193購買的東西在一個公司A(該組中,以便T.from_group = 1)爲$ 5,並得到的$ 1獎賞和購買其他產品爲$ 5從公司B(出所以T.from_group = 0),並再次獲得1美元的獎勵。
我的預期成果是:1
我越來越:
查詢1:1
QUERY2:2
我可以簡單地使用查詢1,但我有別的事問題當我使用它,所以我需要了解真正發生了什麼!
我的目標是從數據庫中獲得獎勵金額的總和。總和應該是不同的分組公司。也就是說,如果我們有5個不同的分組公司,並且用戶在這5家公司中使用他的錢卡,我應該得到5個不同的總數。如果他在任何不屬於該組織的公司中使用了他的卡片,則該總額不應包括來自該未分組公司的交易。當事務發生時,我有C++代碼來提供數據庫。我的fem_transactions表有company_id,amount_reward_user,fem_user_login_id,from_group(這決定了用戶是否從組或團隊中進行交易),授權等。
我想篩選用戶193在每個分組。
我現在理解JOINTS概念,但我需要知道爲什麼t.from_group在第二個查詢上被忽略?
你將不得不發佈一些示例數據和輸出說明問題,隨着你期望輸出是什麼。請編輯您的問題並添加此信息。 – 2010-07-26 18:37:21
我不知道它是否能解決您的問題,但您需要更好地理解左連接和where子句。這個是SQL Server特有的,但saame原則應該適用於所有數據庫: http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN – HLGEM 2010-07-26 18:39:50
您應該編輯原始帖子,而不是發佈回覆。另外,我們需要看一些表格模式。我不確定這個分組是如何適合這個公司的。 – Thomas 2010-07-27 14:52:37