我有以下表:这些SQL语句是否相同?
| sample_id (varchar, unique) | field1 (int) | field2 (int) | ...
--------------------------------------------------------------------
| 9b7acb476c4ab04c7ddbc | 100 | 56 | ...
| a2e4df67e98ccaf088abf | 23 | NULL | ...
| fcbe9cecd6b96cba7c6ee | NULL | 43 | ...
...
我具有由先前的用户创建的同时查询两个字段和下面的代码得到各行的随机子集:
SELECT sample_id, field1, field2
FROM samples
WHERE field1 != NULL
UNION ALL
SELECT sample_id, field1, field2
FROM samples
WHERE field2 != NULL
ORDER BY RAND()
LIMIT 1000
我通过重写查询作为以为优化代码:基于一些文档我读here
SELECT sample_id, field1, field2
FROM samples
WHERE field1 != NULL
OR field2 != NULL
ORDER BY RAND()
LIMIT 1000
似乎都查询是等效的,但我不知道如何在查询中处理ORDER BY RAND()
行。它仅适用于第二个查询(即UNION ALL
之后的查询)吗?
原始查询中的ORDER_BY RAND()行只应用于第二个select语句还是两者? –
@SyafiqKamarulAzman。 。 。如在原始查询中一样,它适用于两者。这就是原始查询的工作原理,所以应该是答案的作用。 –