无法合并三个 SELECT 语句,UNION 不起作用

Trouble combining THREE SELECT statements, UNION not working

我在组合三个 select 语句时遇到了很大的麻烦,我试过联合它不起作用,因为单独的 select 语句它们确实有效但是我需要其余的是一个 swift 语句,如果可能甚至将最终记录以随机顺序排列

      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
)