MySQL条件SELECT语句

时间:2009-10-21 14:26:38

标签: sql mysql

如果有记录的字段包含“X”,则返回它们,否则返回随机记录。

你是怎么做到的?

3 个答案:

答案 0 :(得分:1)

最好使用2个查询。第一个返回field='x'的记录。如果它为空,则使用field!='x'查询随机记录。获取随机记录的效率非常低,因为您可以从SO上的“获取随机记录”问题的数量中看到。因此,如果你绝对需要,你真的只想这样做。

答案 1 :(得分:0)

选择一个随机记录的位在mysql中的大型表上非常困难且效率很高,在这个website中你可以找到一个脚本来完成它,添加你的条件应该是微不足道的x'并获得您需要的功能。

答案 2 :(得分:0)

嗯,这是基于mysql.users表的示例:

首先,不存在的记录:

mysql> SELECT * FROM (select user, 1 as q from user where user like '%z' union all (select user, 0 from user limit 1)) b WHERE q=(SELECT CASE WHEN EXISTS(select user, 1 as q from user where user like '%z' ) THEN 1 ELSE 0 END);

+--------+---+
| user   | q |
+--------+---+
| drupal | 0 |
+--------+---+

1 row in set (0.00 sec)

然后,现有:

mysql> SELECT * FROM (select user, 1 as q from user where user like '%t' union all (select user, 0 from user limit 1)) b WHERE q=(SELECT CASE WHEN EXISTS(select user, 1 as q from user where user like '%t' ) THEN 1 ELSE 0 END);

+------------------+---+
| user             | q |
+------------------+---+
| root             | 1 |
| root             | 1 |
| debian-sys-maint | 1 |
| root             | 1 |
+------------------+---+

4 rows in set (0.00 sec)

也许它会有用,或者有人能够以更好的方式重写它。