1

私が探しているものの例として、次の例を考えてみてください Fruits テーブル


id  user_id     fruit           type        

1   43      apple           fresh
2   87      watermelon      fresh
3   99      apple           fresh
4   43      pineapple       dried
5   60      pineapple       dried
6   60      lemon           fresh
7   99      kiwi            fresh   
8   43      mango           fresh   

同じテーブルに「リンゴ」と「乾燥」の両方があるすべてのユーザーのすべてのレコードを検索したい (同時に同じ行にあるとは限らない)。同じユーザーが両方の条件を持っている必要があります。

私が返したいのは:


id  user_id     fruit           type        

1   43      apple           fresh
4   43      pineapple       dried

自己結合のいくつかの組み合わせを試しました:


SELECT distinct f1.*, f2.*
FROM orders f1 FULL JOIN orders f2
ON f1.user_id = f2.user_id
WHERE f1.fruit ILIKE 'apple'
AND f2.type ILIKE 'dried'

しかし、それを完全に正しくすることができませんでした。

これは Rails アプリケーション用なので、ActiveRecord でこれを実行できるようにしたいと思っていますが、必要に応じてプレーン SQL で満足しています。

これを行う方法について何か提案はありますか? ティア

4

4 に答える 4

2
SELECT
  orders.*
FROM
  orders
INNER JOIN
  (SELECT user_id FROM orders WHERE fruit = 'apple' GROUP BY user_id) AS apple_buyers
    ON apple_buyers.user_id = orders.user_id
INNER JOIN
  (SELECT user_id FROM orders WHERE type  = 'dried' GROUP BY user_id) AS dried_buyers
    ON dried_buyers.user_id = orders.user_id
于 2012-10-15T11:54:34.397 に答える
2

これはあなたのためにそれをするはずです:

SELECT
    *
FROM
    Fruits
WHERE
  (Fruit = 'apple'
OR Type = 'dried')
AND
    EXISTS
    (SELECT
        NULL
    FROM 
        FRUITS F1
        INNER JOIN Fruits F2 ON F1.User_ID = F2.User_ID AND F1.Fruit = 'apple' and F2.Type = 'dried'
    WHERE
        Fruits.user_ID = F1.User_ID)
于 2012-10-15T12:27:56.463 に答える
0
SELECT A.id , A.user_id,A.fruit,A.types  FROM iid A 
WHERE user_id IN(
    SELECT A.user_id FROM 
    (
        SELECT user_id FROM iid 
        WHERE types='dried'
    )A
 INNER JOIN 
    (
        SELECT user_id FROM iid WHERE fruit = 'apple'
    )B
ON A.user_id=b.user_id)
AND ( fruit='apple' OR types='dried')
于 2015-05-19T08:20:37.820 に答える