从表中获取所需数据的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是同一个表的别名。你没有给你的表起名字,所以我给它起了一个笨拙但很容易键入的表名。