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行。