我的数据库表A和表B中有两个表 -
Table `A`
SN | Order1 | Order2 | Text
(INT) | (TINYINT) | (TINYINT) | (VARCHAR)
1001 | 1 | 1 | ABC
1001 | 1 | 2 | DEF
1001 | 1 | 3 | GHI
1001 | 2 | 1 | IOU
1001 | 3 | 1 | JKL <--
1001 | 3 | 2 | LMO
1001 | 3 | 3 | UTF
....
1021 | 1 | 1 | ZXC
1021 | 1 | 2 | QWE
1021 | 2 | 1 | JKL <--
1021 | 3 | 1 | YOU
在另一张表中
Table `B`
SN | Order1 | rSN | rOrder1
1021 | 2 | 1001 | 3
现在,当我查询1021
的数据时,结果应该是: -
Result Needed
1 | 1 | ZXC
1 | 2 | QWE
2 | 1 | JKL
2 | 2 | LMO
2 | 3 | UTF
3 | 1 | YOU
目前我正在尝试这样的事情 -
SELECT `SN`, `Order1`, `Order2`, `Text` FROM `Table A`
WHERE `SN`=1012
UNION
SELECT `SN`, `Order1`, `Order2`, `Text` FROM `Table A`
WHERE `Table A`.`SN`
IN (SELECT `rSN` FROM `Table B` WHERE `SN`=1021)
AND `Table A`.`Order1`
IN (SELECT `Order1` FROM `Table B` WHERE `SN`=1021)
正在给出如此结果: -
Result
SN | Order1 | Order2 | Text
1021| 1 | 1 | ZXC
1021| 1 | 2 | QWE
1021| 2 | 1 | JKL
1021| 3 | 1 | YOU
1001| 3 | 1 | JKL
1001| 3 | 2 | LMO
1001| 3 | 3 | UTF
如何让结果的最后三行的Order1
和Order2
与引用行相同,例如1001 | 2 | 2 | LMO
编辑---
我想在查询提供数据输出时,将Order1
的{{1}}值与1001
的{{1}}相同。
由于Order1
的顺序很重要。
Order2 Text与Order1中此组中对应的第一个值相关
并1012
存储对数据库中已输入的重复相关文本的引用,并在相应的Text
答案 0 :(得分:0)
我自己找到了解决方案: -
<强>解决方案强>
SELECT `Order1`, `Order2`, `Text` FROM `Table A` WHERE `SN` = 1012
UNION DISTINCT
SELECT `Table B`.`Order1`, `Table A`.`Order2`, `Table A`.`Text`
FROM `Table A` JOIN `Table B`
WHERE `Table B`.`rSN` = `Table A`.`SN`
AND `Table B`.`Order1` = `Table A`.`Order1`
AND `Table B`.`SN` = 1021
ORDER BY `Order1`, `Order2`
<强>解释强>
第一个SELECT
选择与Rows
1021
在第二部分查询中,我希望引用的Text
即SN
行的1001
具有Order1
值{{ 1}}(参见表B)。
但是正如引用3
那样。 SN
1021
值Order1
,其文本为2
(参见表A,指向行(“&lt; 1&gt; - “)与1021 SN)
因此,我们希望与JKL
格式化为Order1
相关联的文字1001 | 3 |
的所有值
对于上述问题1001 | 2 |
Works,Joining给出了一个表格: -
JOIN
从这个结果我们可以拿起结果集。
了解SELECT * FROM `Table A` JOIN `Table B`
WHERE `Table B`.`rSN` = `Table A`.`SN`
AND `Table B`.`Order1` = `Table A`.`Order1`
AND `Table B`.`SN` = 1021
Table `B` Table `A`
SN | Order1 | rSN | rOrder1 || SN | Order1 | Order2 | Text
1021 | 2 | 1001 | 3 || 1001 | 3 | 1 | JKL
1021 | 2 | 1001 | 3 || 1001 | 3 | 2 | LMO
1021 | 2 | 1001 | 3 || 1001 | 3 | 3 | UTF
的来源 - &gt;就在这里现在我们正在接收2, 2, LMO
来自JOIN结果而不是像之前的那样我们正在挑选Table B.Order1
的{{1}},然后结果订购我们不想要的订单。
Order1
- &gt;与其相关的信息,
具有相同1001
的信息会相互显示相关的字词/信息,因为why isn't 1, 3, GHI required as a part of result
没有任何相关信息Order1
因此 <结果部分。
现在我们已经得到了第二个查询的1021
,它应该是1, 3, GHI
而不是Order1
我们现在可以通过订单子句轻松地命令它们
我希望这也能澄清这个问题。 还是谢谢大家:)
------编辑-------
UNION中的 2
将从最终结果中删除3
的重复条目