从表中获取所需数据的MySQL查询

从表中获取所需数据的MySQL查询,mysql,sql,Mysql,Sql,我有一张这样的桌子: RS Value Measure Feature 1 x1 a 5k 1 x2 b 5k 1 x3 b 10k 1 x4 c 10k 2 y1 a 5k 2 y2 c 5k 2 y3 b 10

我有一张这样的桌子:

RS    Value    Measure    Feature
1     x1       a          5k 
1     x2       b          5k
1     x3       b          10k
1     x4       c          10k
2     y1       a          5k
2     y2       c          5k
2     y3       b          10k
2     y4       d          10k  
.     .        .          .
.     .        .          .
.     .        .          .
有不同的Rs值,如1,2,3,4等

现在我想要一个只获取两个RS值的查询,这里是1,2,它返回的结果如下:

RS    Value    Measure    Feature
1     x1       a          5k
2     y1       a          5k
1     x3       b          10k
2     y3       b          10k
.     .        .          .
.     .        .          .
SELECT 
    bar.rs, bar.value, bar.measure, bar.feature 
FROM 
    bar, bar AS obar 
WHERE 
    ( bar.rs == 1 OR bar.rs == 2 )
  AND
    obar.measure = bar.measure 
  AND
    obar.feature = bar.feature
  AND
    obar.rs != bar.rs 
  ORDER BY
    measure, rs;

i、 e,我只想要那些具有共同度量和特征的行。

为此,您基本上需要在同一查询中查看两次数据,并将数据与自身进行比较。有很多方法可以做到这一点,但我能想到的第一个方法是只引用表两次

给定包含此数据的表格栏:

mysql> select * from bar;
+------+-------+---------+---------+
| rs   | value | measure | feature |
+------+-------+---------+---------+
|    1 | x1    | a       | 5k      |
|    1 | x2    | b       | 5k      |
|    1 | x3    | b       | 10k     |
|    1 | x4    | c       | 10k     |
|    2 | y1    | a       | 5k      |
|    2 | y2    | c       | 5k      |
|    2 | y3    | b       | 10k     |
|    2 | y4    | d       | 10k     |
+------+-------+---------+---------+
8 rows in set (0.00 sec)
根据我对您的要求的解释,这可能是错误的,您希望选择至少有两个条目的所有行,其中度量和特征匹配,rs是两个值之一

我提出的问题如下:

RS    Value    Measure    Feature
1     x1       a          5k
2     y1       a          5k
1     x3       b          10k
2     y3       b          10k
.     .        .          .
.     .        .          .
SELECT 
    bar.rs, bar.value, bar.measure, bar.feature 
FROM 
    bar, bar AS obar 
WHERE 
    ( bar.rs == 1 OR bar.rs == 2 )
  AND
    obar.measure = bar.measure 
  AND
    obar.feature = bar.feature
  AND
    obar.rs != bar.rs 
  ORDER BY
    measure, rs;
这基本上是说,您希望所有来自bar的行,其中obar中有一个匹配的条目,基本上是bar的另一个名称,但是rs列不同

运行查询的结果是:

+------+-------+---------+---------+
| rs   | value | measure | feature |
+------+-------+---------+---------+
|    1 | x1    | a       | 5k      |
|    2 | y1    | a       | 5k      |
|    1 | x3    | b       | 10k     |
|    2 | y3    | b       | 10k     |
+------+-------+---------+---------+
4 rows in set (0.00 sec)
您可以将其表示为不存在的查询:


尝试此操作,从表中选择RS、VALUE、measure、feature,其中RS以1,2的顺序按度量值限制4返回所有行集合中的前4行,这些行的RS是1,2的顺序按度量值限制4。然后只需省略限制4即可。这并不难,但即使没有限制,查询也会返回错误的结果。我已经提到了我所需要的。问题是,桌子上有200个不同的R。我希望我的查询能够比较用户应该输入的任何两个特定的RS1和RS2,并返回所需的结果;那么,在这个加法之后,确切的查询应该是什么呢?好吧,如果您想要的只是rs为1或rs为2的行的数据,那么这就是整个查询-只是一个短的选择行。但这将只返回rs为1或2的所有行。我不需要。我放的表只是主表的摘录。我希望能够放置任意两个rs,并得到只包含在这两个rs之间具有共同度量和特征的行的结果集。我没有完全理解它。只有一张桌子。我想在你的回答中t和t2是两个不同的表?@Elysium。t和t2是同一个表的别名。你没有给你的表起名字,所以我给它起了一个笨拙但很容易键入的表名。