我有任务进入一个查询结果两个选择按列合并

时间:2012-10-16 15:35:45

标签: mysql

首先查询:

SELECT COUNT(*)
FROM `test` t ,`user_test` ut,`user` u 
WHERE test_type_id = 1
AND t.created_on >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND t.created_on < CURDATE()
AND t.id = ut.test_id
AND u.id = ut.user_id
AND u.user_account_type_id != X 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...'  
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 

第二次查询:

SELECT COALESCE(SUM(IF(tt.type = 0, 1, 0)), 0) aaa, COALESCE(SUM(IF(tt.type = 1, 1, 0)), 0) bbb 
FROM transaction_test tt ,USER u
WHERE tt.created_on >= DATE_SUB(CURDATE(), INTERVAL 10000 DAY) AND tt.created_on < CURDATE()
AND u.id = tt.user_id
AND u.user_account_type_id != X
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...'  
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 

必须从一个选择中选择结果 我试试这个

SELECT COALESCE(SUM(IF(tt.type = 0, 1, 0)), 0) Email, COALESCE(SUM(IF(tt.type = 1, 1, 0)), 0) SMS ,(
SELECT COUNT(*)
FROM `test` t ,`user_test` ut,`user` u 
WHERE test_type_id = 1
AND t.created_on >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND t.created_on < CURDATE()
AND t.id = ut.test_id
AND u.id = ut.user_id
AND u.user_account_type_id != X 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...'  
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
)
FROM transaction_test tt ,USER u
WHERE tt.created_on >= DATE_SUB(CURDATE(), INTERVAL 10000 DAY) AND tt.created_on < CURDATE()
AND u.id = tt.user_id
AND u.user_account_type_id != X
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...'  
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 

我不喜欢使用两次

AND u.user_account_type_id != X
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...'  
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' 

这部分可以任何机构建议如何避免这种情况?提前谢谢

1 个答案:

答案 0 :(得分:0)

尝试一下我加入了你的两个查询,因为在查询中你有相同的条件,我使用INNER JOIN来确保两个表都有数据,如果你担心从右表获取数据或左表将其相应更改为RIGHT JOINLEFT JOIN

SELECT COUNT(*) ,COALESCE(SUM(IF(tt.type = 0, 1, 0)), 0) aaa, COALESCE(SUM(IF(tt.type = 1, 1, 0)), 0) bbb 
FROM `test` t ,
INNER JOIN `user_test` ut ON (t.id = ut.test_id)
INNER JOIN `user` u  ON (u.id = ut.user_id)
INNER JOIN `transaction_test` tt  ON (u.id = tt.user_id)
WHERE test_type_id = 1
AND t.created_on >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND t.created_on < CURDATE()
AND u.user_account_type_id != X 
AND u.usr NOT LIKE '%...' AND u.usr NOT LIKE '%...' AND u.usr NOT LIKE '%...' 
AND u.usr NOT LIKE '%...' AND u.usr NOT LIKE '%...' AND u.usr NOT LIKE '%...' 

希望它运作良好

相关问题