1

データベースにテーブルAとテーブルBの2つのテーブルがあります-

                   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結果の最後の3行のとOrder2を参照する行と同じにするために何をすべきですか?1001 | 2 | 2 | LMO

編集 - -

ここでは、クエリがデータ出力を提供するときと同じ値を取得することを考え ていますOrder11001Order11012

の順序Textが重要です。

Order2テキストは、このGroup In 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選択しますRows1021

クエリの2番目の部分では、参照TextされたIEの行に値が必要でした(表Bを参照)SNしかし、参照はそのを持っているので、そのテキストはどこにありますか(表A、1021 SNのポイント行( "<-")を参照)したがって、 FormattedAsに関連付けられたテキスト のすべての値が必要 です結合すると、次のようなテーブルが得られます:-1001Order13
SN 1021Order12JKL
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.Order1From the JOINの結果を取得しています。代わりに、以前Order1のように、代わりにOfを取得しました。これにより、不要な1001順序になります。

why isn't 1, 3, GHI required as a part of result->同様
の関連情報として、同じOrder1情報は相互に関連する単語/情報を示して1021おり、関連情報1, 3, GHIないため、結果部分では必要ありません。

そして今、私たちはすでにOrder12番目のクエリのを取得しているはずですが、そうでは2ないはずです。これで3、Order句で簡単に注文できます。

これで問題が明確になることを願っています。それでもみんなありがとう:)

- - - 編集 - - - -

DISTINCTJKLUNIONでは、最終結果からの重複エントリが削除されます

于 2012-09-17T08:16:32.850 に答える