Mysql 无法组合三个SELECT语句,UNION不起作用
我在组合三个select语句时遇到了巨大的困难,我尝试了union它不起作用,因为单独的select语句确实起作用,但是我需要将其余语句变成一个swift语句,如果可能的话,甚至可以将最终记录以随机顺序排列Mysql 无法组合三个SELECT语句,UNION不起作用,mysql,sql,database,select,union,Mysql,Sql,Database,Select,Union,我在组合三个select语句时遇到了巨大的困难,我尝试了union它不起作用,因为单独的select语句确实起作用,但是我需要将其余语句变成一个swift语句,如果可能的话,甚至可以将最终记录以随机顺序排列 SELECT DISTINCT email FROM customer_1_tbl WHERE email NOT IN (SELECT temp.email FROM temp_emails AS
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) = 'seznam.cz'
ORDER BY RAND()
LIMIT 6
UNION
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) = 'gmail.com'
ORDER BY RAND()
LIMIT 6
UNION
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) != 'gmail.com'
AND substring_index(email, '@', -1) != 'seznam.cz'
AND RAND() < (SELECT ((6/COUNT(*))*10)
FROM customer_1_tbl)
ORDER BY RAND()
LIMIT 6
如果在每个查询中都需要ORDER BY,请尝试以下操作:
SELECT * FROM(
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) = 'seznam.cz'
ORDER BY RAND()
LIMIT 6
) AS A
UNION
SELECT * FROM (
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) = 'gmail.com'
ORDER BY RAND()
LIMIT 6
) AS B
UNION
SELECT * FROM (
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) != 'gmail.com'
AND substring_index(email, '@', -1) != 'seznam.cz'
AND RAND() < (SELECT ((6/COUNT(*))*10)
FROM customer_1_tbl)
ORDER BY RAND()
LIMIT 6
) AS C
为了对部分查询而不是整个查询使用order BY子句,请使用括号:
(
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) = 'seznam.cz'
ORDER BY RAND()
LIMIT 6
)
UNION
(
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) = 'gmail.com'
ORDER BY RAND()
LIMIT 6
)
UNION
(
SELECT DISTINCT email
FROM customer_1_tbl
WHERE email NOT IN (SELECT temp.email
FROM temp_emails AS temp)
AND substring_index(email, '@', -1) != 'gmail.com'
AND substring_index(email, '@', -1) != 'seznam.cz'
AND RAND() < (SELECT ((6/COUNT(*))*10)
FROM customer_1_tbl)
ORDER BY RAND()
LIMIT 6
)
在您的查询结束时按顺序排序。然后我的问题是前两次选择的实际记录将始终相同。所以每次我都需要随机得到6个与union不起作用的值?在我的脚本中,它不运行,返回布尔值false。如果我删除order by rand,它可以工作,但是我需要select中的6条记录是随机的。难道你不能将所有内容都合并到一个查询中吗?ORing WHERE子句的最后部分&像现在这样从单个查询中获取6个随机值。使用括号是不够的。谢谢,这确实有效,你介意解释一下你的工作原理吗?我可以看到你添加的内容。不过,我是一个初学者,我想更确切地理解你的工作原理。洛拉如前所述,我只是在你的查询中添加了括号。如果没有它们,则不能使用ORDER BY和LIMIT per partial query;整个查询可能只有一个ORDER BY和LIMIT,这不是您想要的。顺便说一句:由于三个部分查询检索到的电子邮件因WHERE子句的不同而不同,因此让DBMS查找重复的邮件是没有意义的,UNION就是这么做的。改为使用UNIONALL,以节省dbms的额外工作。