2013-08-14 5 views
0

Мне сложно извлечь из подзапроса значение.Извлечение значения из подзапроса в основной запрос

Предположим, у меня есть следующие таблицы:

D (FID, PID, г),

F (FID, т, 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 

Спасибо.

+0

некоторые выборочные данные –

+1

Не могли бы вы предоставить нам структуру таблицы и некоторые примеры данных в SQL friddle? –

+1

Вы используете SQL Server? MySQL? PostgreSQL? –

ответ

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 
+0

Можете ли вы предложить в решении этого https://stackoverflow.com/questions/45369874/how-to-select-the-value-from-sub-query-result – mahesh

0

Я бы создал временную таблицу в этой форме T (pid, j). Затем вы можете вставить все данные pid и f.j отдельно.

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 

Отметьте, что я не пробовал этот запрос. Однако, я думаю, именно так следует смотреть.

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 
Смежные вопросы