繁体   English   中英

MySQL条件SELECT语句

[英]MySQL conditional SELECT statement

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

您如何做到这一点?

最好用2个查询完成。 第一个返回记录,其中field='x' 如果为空,则使用field!='x'查询一个随机记录。 从SO上的“获取随机记录”问题中可以看到,获取随机记录的效率可能非常低。 因此,您确实只在绝对需要时才这样做。

在mysql的大表上,仅选择一个随机记录将是非常困难且效率很低的,在此网站上您可以找到一个脚本来执行此操作,为您添加'x'的条件并获得您所需要的功能应该是微不足道的需要。

好吧,这是我基于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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM