1

我的数据库中有两个表表 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值。1001Order11012

因为顺序Text很重要。

Order2 文本与其在此组中对应的第一个值相关,在 Order1 中并Table B存储对数据库中已输入的重复相关文本的引用,并定义其在相应的位置SN

4

1 回答 1

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被引用SN1001行具有Order1价值3(参见表 B)。
但是作为引用SN ie1021有它的Order12,它的文本在哪里JKL(参见表 A,带 1021 SN 的 Pointed Row ("<--"))所以我们想要与Formatted As相关联的 Text
的所有值 对于上述问题Order11001 | 3 |1001 | 2 |
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

并且从这个结果中我们可以拿起结果集。
了解如何2, 2, LMO来 -> 它就在这里 现在我们正在Table B.Order1从 JOIN 结果中获取,而不是像之前一样一样,我们正在获取Order1Of the 1001,然后导致我们不想要的排序。

why isn't 1, 3, GHI required as a part of result-> 与相关信息一样,
具有相同信息的Order1信息相互显示相关的单词/信息,并且由于1021没有任何相关信息,1, 3, GHI因此结果部分不需要

现在我们已经得到了Order1第二个查询的结果,应该2不是3我们现在可以很容易地通过 Order 子句对它们进行排序

我希望这也能澄清这个问题。还是谢谢大家:)

- - - 编辑 - - - -

DISTINCT在 UNION 中将删除JKL来自最终结果的重复条目

于 2012-09-17T08:16:32.850 回答