Mysql 顺序上的间隙,在相对位置上连接
我第一次问一个问题。如果您必须单击图像以获取样本数据和我要查找的内容,请提前道歉。我无法仅用文本使格式看起来正确 编辑:也许这会有帮助 我的数据实际上只是由“|”和“,”分隔的字符串。每个订单有两个方面和一组供应商和价格。供应商以降价方式订购 订单1 |端=0 | 0,价格1,供应商1 | 1,价格2,供应商2 | 2,价格3,供应商1 订单1 |方=1 | 0,价格4,供应商2 | 1,价格5,供应商1 | 2,价格6,供应商1 所以provider1在side0上给出了最佳价格1,在side0上给出了最差价格3。Provider1也给出了side1的次优价格和side1的最差价格。我想把price1和price5配对,price3和price6配对,然后得到不同的结果 首先,我将字符串解析为两个具有列的表: 表1 订单|侧|级|供应商|价格 1……| 0……| 0……| 1……| 1 1……| 0……| 1……| 2……| 2 1……| 0……| 2……| 1……| 3 表2 订单|侧|级|供应商|价格 1.1.0.2.4 1.........1......1.......5 1.1.2.1.6 我想将provider1在side0上的第一个价格与provider1在side1上的第一个价格进行比较,而不考虑级别。和provider1在side0上的第二个价格,以及provider1在side1上的第二个价格,无论级别如何。如此类推,只要我能将provider1的价格在双方配对 我的图像是从表1中选择订单、级别、价格,其中提供者=1; 并从表2中选择订单、级别、价格,其中提供者=1 在生产中,我将有超过1个订单,并且0方和1方的价格数量不均衡。所以,如果provider1在side0上给出了1个价格,在side1上给出了3个价格,我只想比较side0的价格和最好的side1的价格 编辑2:找到解决方案 显然,我想要的是按组自动递增,如中所述 创建表3 订单int10未签名,id中间不为空自动递增,价格加倍,主键订单,id 发动机=MyISAM 在表3中插入订单,价格为select order,价格来自表1,其中provider=1Mysql 顺序上的间隙,在相对位置上连接,mysql,sql,join,Mysql,Sql,Join,我第一次问一个问题。如果您必须单击图像以获取样本数据和我要查找的内容,请提前道歉。我无法仅用文本使格式看起来正确 编辑:也许这会有帮助 我的数据实际上只是由“|”和“,”分隔的字符串。每个订单有两个方面和一组供应商和价格。供应商以降价方式订购 订单1 |端=0 | 0,价格1,供应商1 | 1,价格2,供应商2 | 2,价格3,供应商1 订单1 |方=1 | 0,价格4,供应商2 | 1,价格5,供应商1 | 2,价格6,供应商1 所以provider1在side0上给出了最佳价格1,在side
对另一个表重复上述步骤,按顺序连接,id.很难理解这个场景。根据您的示例数据,下面是解决方案 SQL: 输出:
mysql> select * from table1;
+----+-------+------+------+
| id | order | var | data |
+----+-------+------+------+
| 1 | 1 | 1 | x |
| 2 | 1 | 3 | y |
| 3 | 1 | 5 | z |
+----+-------+------+------+
3 rows in set (0.00 sec)
mysql> select * from table2;
+----+-------+------+-------+
| id | order | var2 | data2 |
+----+-------+------+-------+
| 1 | 1 | 1 | a |
| 2 | 1 | 2 | b |
| 3 | 1 | 6 | c |
| 4 | 1 | 7 | d |
+----+-------+------+-------+
4 rows in set (0.00 sec)
mysql>
mysql> -- Process of reporting
mysql> SET @rownum1:=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @rownum2:=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT t1.order, t1.var, t2.var2, t1.data, t2.data2
-> FROM
-> (SELECT *, @rownum1:=@rownum1+1 AS rownum FROM table1) t1,
-> (SELECT *, @rownum2:=@rownum2+1 AS rownum FROM table2) t2
-> WHERE t1.rownum = t2.rownum AND
-> t1.`order` = 1 AND
-> t2.`order` = 1;
+-------+------+------+------+-------+
| order | var | var2 | data | data2 |
+-------+------+------+------+-------+
| 1 | 1 | 1 | x | a |
| 1 | 3 | 2 | y | b |
| 1 | 5 | 6 | z | c |
+-------+------+------+------+-------+
3 rows in set (0.00 sec)
图像是不够的。请说说你想要什么。你想要两个表中的前3条记录吗?@DylanSu有帮助吗?@Suyash有帮助吗?发布解决方案。请检查这是否是你所期望的@乔希:谢谢!不完全是我需要的答案,但给了我要搜索的关键词。我的答案是按组自动递增。
mysql> select * from table1;
+----+-------+------+------+
| id | order | var | data |
+----+-------+------+------+
| 1 | 1 | 1 | x |
| 2 | 1 | 3 | y |
| 3 | 1 | 5 | z |
+----+-------+------+------+
3 rows in set (0.00 sec)
mysql> select * from table2;
+----+-------+------+-------+
| id | order | var2 | data2 |
+----+-------+------+-------+
| 1 | 1 | 1 | a |
| 2 | 1 | 2 | b |
| 3 | 1 | 6 | c |
| 4 | 1 | 7 | d |
+----+-------+------+-------+
4 rows in set (0.00 sec)
mysql>
mysql> -- Process of reporting
mysql> SET @rownum1:=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @rownum2:=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT t1.order, t1.var, t2.var2, t1.data, t2.data2
-> FROM
-> (SELECT *, @rownum1:=@rownum1+1 AS rownum FROM table1) t1,
-> (SELECT *, @rownum2:=@rownum2+1 AS rownum FROM table2) t2
-> WHERE t1.rownum = t2.rownum AND
-> t1.`order` = 1 AND
-> t2.`order` = 1;
+-------+------+------+------+-------+
| order | var | var2 | data | data2 |
+-------+------+------+------+-------+
| 1 | 1 | 1 | x | a |
| 1 | 3 | 2 | y | b |
| 1 | 5 | 6 | z | c |
+-------+------+------+------+-------+
3 rows in set (0.00 sec)