mysql选择具有特定值的n行
下面是我的表查询:mysql选择具有特定值的n行,mysql,database,Mysql,Database,下面是我的表查询: id name number Code 1 red 1 A 2 red 3 B 3 blue 3 C 4 blue 5 A 5 purple 2 D 6 yellow 3 D 7 yellow 4 C 现在我需要查询得到2个随机行,这样有1个名称是红色,1个数字是3,类似这样: 从name=
id name number Code
1 red 1 A
2 red 3 B
3 blue 3 C
4 blue 5 A
5 purple 2 D
6 yellow 3 D
7 yellow 4 C
现在我需要查询得到2个随机行,这样有1个名称是红色,1个数字是3,类似这样:
从name=“red”限制1和number=3限制1的表格中选择*
就像第1+3行、第1+6行或第2+行中的任何其他行一样。
我的问题是:
SELECT * FROM table
group by name,number
having count(name="red") = 1
and count(number=3) = 1
ORDER BY RAND()
LIMIT 2;
但是,它似乎只是随机查询该行,不满足我的要求。谁能告诉我出了什么问题吗?
谢谢。如果你能接受奇怪的格式
select x.id x_id
, x.name x_name
, x.number x_number
, x.code x_code
, y.id y_id
, y.name y_name
, y.number y_number
, y.code y_code
from my_table x
join my_table y
on y.id <> x.id
where x.name = 'red'
and y.number = 3
order by rand()
limit 1;
如果你能接受奇怪的格式
select x.id x_id
, x.name x_name
, x.number x_number
, x.code x_code
, y.id y_id
, y.name y_name
, y.number y_number
, y.code y_code
from my_table x
join my_table y
on y.id <> x.id
where x.name = 'red'
and y.number = 3
order by rand()
limit 1;
我认为这将满足您的要求:
select t1.*
from tablename t1
inner join (
select t1.id id1, t2.id id2
from tablename t1 inner join tablename t2
on t2.id > t1.id
and ('red' in (t1.name, t2.name)) + ('3' in (t1.number, t2.number)) = 2
order by rand() limit 1
) t2 on t1.id in (t2.id1, t2.id2)
请注意,返回概率最高的行是id=2
,因为它可以与表中的任何其他行组合。请参阅。
我认为这将满足您的要求:
select t1.*
from tablename t1
inner join (
select t1.id id1, t2.id id2
from tablename t1 inner join tablename t2
on t2.id > t1.id
and ('red' in (t1.name, t2.name)) + ('3' in (t1.number, t2.number)) = 2
order by rand() limit 1
) t2 on t1.id in (t2.id1, t2.id2)
请注意,返回概率最高的行是id=2
,因为它可以与表中的任何其他行组合。请参阅。
如果第2行是唯一符合条件的行,该怎么办?可以返回同一行两次吗?我需要查询以获得2个随机行,其中1个名称为红色,1个数字为3这2个随机行出现在同一行中是否安全?标准组合是否总是“一行按
名称
和一行按编号
”,并且标准值仅不同?抱歉,没有澄清。因为第2行同时满足这两个要求,所以另一行并不重要(所以2+1/3/4/5/6/7-任何都可以)。没有重复的行。您的MySql版本是什么?如果第2行是唯一符合条件的行怎么办?可以返回同一行两次吗?我需要查询以获得2个随机行,其中1个名称为红色,1个数字为3。这2个随机行出现在同一行是否安全?标准组合是否总是“一行按名称
和一行按编号
”,并且标准值仅不同?抱歉,没有澄清。因为第2行同时满足这两个要求,所以另一行并不重要(所以2+1/3/4/5/6/7-任何都可以)。没有重复的行。你的MySql版本是什么?与问题不匹配。它可能返回两个条件都匹配的行,而没有一个条件与另一个条件匹配的行。解决方案可能与中的类似。实际上@草莓你的答案在我看来还行。我投了更高的票,我的解决方案不安全。假设只有一行匹配第二个条件,同时它也匹配第一个条件。。。如果CTE选择这一行,那么主查询将不会添加第二行,并且输出将只包含一行。在fiddle-comment第3行和第6行中,插入并多次执行查询-输出可能包含1行或2行。与问题不匹配。它可能返回两个条件都匹配的行,而没有一个条件与另一个条件匹配的行。解决方案可能与中的类似。实际上@草莓你的答案在我看来还行。我投了更高的票,我的解决方案不安全。假设只有一行匹配第二个条件,同时它也匹配第一个条件。。。如果CTE选择这一行,那么主查询将不会添加第二行,并且输出将只包含一行。在fiddle-comment第3行和第6行中,插入并多次执行查询,输出可能包含1行或2行。