0

2 つのクエリを結合しようとしているのですが、問題が発生しています。ご覧ください。結合しようとしているこれらの 2 つの別個のクエリがあります。私が始めていない親の数を数えるフィールドを取得するためにそこにある3番目の結合があります。

SELECT
    e.baseName AS baseName, 
    s.baseName AS masterName
FROM dataSet e 
INNER JOIN dataSet s 
    ON s.id = e.entityId 
ORDER BY e.entityId

SELECT  
    e.baseName AS baseName, 
    b.baseName AS masterName, 
    COUNT(*)-1 AS siblingCount 
FROM dataSet e 
JOIN dataSet b 
    ON b.id=e.entityId 
GROUP BY b.id, b.baseName 

これを思いついたのですが、問題が発生しています

SELECT
    e.baseName AS baseName, 
    s.baseName AS masterName,
    COUNT(*)-1 AS siblingCount 
FROM dataSet e 
    JOIN dataSet b ON b.id = e.entityId
    INNER JOIN dataSet s ON s.id = e.entityId 
GROUP BY b.id, b.baseName 
ORDER BY e.entityId

テーブル構造はこんな感じ

+----+--------------------+----------+
| id | baseName           | entityId |
+----+--------------------+----------+
|  1 | 000000000000000001 |        1 |
|  2 | 000000000000000002 |        1 |
|  3 | 000000000000000003 |        1 |
|  4 | 000000000000000004 |        2 |
|  5 | 000000000000000005 |        2 |
|  6 | 000000000000000006 |        2 |
|  7 | 000000000000000007 |        2 |
|  8 | 000000000000000008 |        2 |
|  9 | 000000000000000009 |        3 |
| 10 | 000000000000000010 |        3 |
| 11 | 000000000000000011 |        3 |
| 12 | 000000000000000012 |        3 |
| 13 | 000000000000000013 |        3 |
| 14 | 000000000000000014 |        3 |
| 15 | 000000000000000015 |        3 |
| 16 | 000000000000000016 |        4 |
| 17 | 000000000000000017 |        4 |
| 18 | 000000000000000018 |        4 |
| 19 | 000000000000000019 |        4 |
| 20 | 000000000000000020 |        4 |
+----+--------------------+----------+

私が本当に探しているのはこれです

+--------------------+--------------------+--------------+-------------+
|      baseName      |      masterName    | siblingCount | parentCount | 
+--------------------+--------------------+--------------+-------------+
| 000000000000000001 | 000000000000000001 |          999 |           0 |
| 000000000000000002 | 000000000000000001 |          998 |           1 |
| 000000000000000003 | 000000000000000001 |          998 |           1 |
| 000000000000000004 | 000000000000000002 |          997 |           2 |
| 000000000000000005 | 000000000000000002 |          997 |           2 |
| ....               | ....               |         .... |        .... |
+--------------------+--------------------+--------------+-------------+

助けていただければ幸いです

4

1 に答える 1

0

さて、私の最大のハードルはあなたのデータを理解することでしたが、「ジョブ」/「ツリー」のアナロジーの後にそれを理解したと思います. 以下は、目的の出力が得られると思われるSQLクエリです。また、私が使用したテスト データのsqlfiddleもあります。お役に立てれば。

SELECT
    e.baseName AS baseName, 
    s.baseName AS masterName,
    (SELECT COUNT(id) FROM dataSet WHERE entityId < e.entityId) as parentCount,
    (SELECT COUNT(id) FROM dataSet WHERE entityId > e.entityId) as siblingCount
  FROM 
    dataSet e 
    LEFT JOIN dataSet s ON s.id = e.entityId
  ORDER BY 
    e.entityId

幸運を!

于 2013-01-22T16:49:49.940 に答える