0

サブクエリから値を抽出するのに苦労しています。

次のテーブルがあるとします。

D( fid , pid , r ),

F( fid , t , j )

最初の選択時に、以下のサブクエリから fj が必要です。

SELECT pid -- Here I need f.j to show up
FROM D
WHERE r='something' AND fid IN
            (
            SELECT f2.fid
            FROM F f2, 
                (
                SELECT f.j, COUNT(*) -- I need f.j above
                FROM F f
                GROUP BY f.j
                HAVING COUNT(*) >=2
                ) f
            WHERE f.j = f2.j
            )
GROUP BY pid
HAVING COUNT(*) >= 2

ありがとう。

4

4 に答える 4

0

このフォームT( pid , j )で一時テーブルを作成します。次に、すべての pid および fj データを個別に挿入できます。

于 2013-08-14T12:11:15.883 に答える
0
SELECT d.pid, f.j, count(f.*) as count
FROM d inner join f
on d.fid = p.fid
WHERE d.r = "something"
GROUP by d.pid, f.j
HAVING count(f.*) >=- 2

このクエリを試していないことに注意してください。とはいえ、このように捉えるべきだと思います。

于 2013-08-14T12:11:52.553 に答える
0

サンプル データがないため、出力がどうなるかは明確ではありませんが、次のことを試すことはできますが、これは最適化されていません。

SELECT  pid ,
        t.j -- Here I need f.j to show up
FROM    D
        INNER JOIN ( SELECT f2.fid ,
                            f2.j
                     FROM   F f2 ,
                            ( SELECT    f.j 
                              FROM      F f
                              GROUP BY  f.j
                              HAVING    COUNT(*) >= 2
                            ) f
                     WHERE  f.j = f2.j
                   ) t ON D.fid = t.fid
WHERE   r = 'something'
GROUP BY pid, t.j
HAVING  COUNT(*) >= 2
于 2013-08-14T12:14:00.093 に答える
0

おそらく次のようなものです:

SELECT D.pid, E.j
FROM D
INNER JOIN (SELECT f1.j
        FROM F f2
        INNER JOIN 
            (
            SELECT f.j, COUNT(*)
            FROM F f
            GROUP BY f.j
            HAVING COUNT(*) >=2
            ) f1
        ON f1.j = f2.j
       ) E
 ON D.fid = E.fid
 WHERE r='something' AND fid IN
        (
        SELECT f2.fid
        FROM F f2, 
            (
            SELECT f.j, COUNT(*) -- I need f.j above
            FROM F f
            GROUP BY f.j
            HAVING COUNT(*) >=2
            ) f
        WHERE f.j = f2.j
        )
 GROUP BY D.pid
 HAVING COUNT(*) >= 2
于 2013-08-14T12:16:49.893 に答える