2016-10-17 14 views
1

私は顧客と私たちのクライアントがさまざまなテーブルから共通に持つすべてのIPカウントを見つけることを試みています。サブクエリで最も内側のほとんどのクエリは外側のほとんどのクエリにアクセスできないことはわかっていますが、それを回避するためにテーブルに結合する方法はわかりません。カラムWHERE句にr.user_idが見つかりません

ご協力いただければ幸いです。

http://imgur.com/a/uMqs7

テーブルの受注は、あなたの基本的な問題は、それが定義される前に、あなたが結果r内のデータを使用することでレビュー、company_user_role、previous_state_transitions

SELECT 
r.id, r.state, 

(SELECT count(dog.ip_address) 

FROM 

(SELECT DISTINCT ip_address COLLATE utf8_unicode_ci AS ip_address 
FROM previous_state_transitions 
WHERE user_id = r.user_id 

UNION 

SELECT DISTINCT ip_address COLLATE utf8_unicode_ci AS ip_address 
FROM previous_state_transitions 
WHERE state_machineable_id = r.user_id 
AND state_machineable_type = "User" 

UNION 

SELECT DISTINCT ip_address 
FROM reviews 
WHERE user_id = r.user_id) AS dog 

INNER JOIN 

(SELECT DISTINCT ip_address COLLATE utf8_unicode_ci AS ip_address 
FROM previous_state_transitions 
WHERE user_id IN (SELECT user_id FROM company_user_roles WHERE company_id = r.company_id) 

UNION 

SELECT DISTINCT ip_address COLLATE utf8_unicode_ci AS ip_address 
FROM previous_state_transitions 
WHERE state_machineable_id = (SELECT user_id FROM company_user_roles WHERE company_id = r.company_id) 
AND state_machineable_type = "User" 

UNION 

SELECT DISTINCT ip_address 
FROM reviews 
WHERE user_id = (SELECT user_id FROM company_user_roles WHERE company_id = r.company_id)) AS cat 

ON dog.ip_address = cat.ip_address) AS ip_count_in_common 

FROM reviews AS r 
WHERE r.created_at > '2016-10-13' 
ORDER BY 1 desc 
+1

投稿を編集してから、4つのネストされたレイヤーを持つクエリがあることがわかったときに、その投稿を中止しました。私はあなたが望む情報を入手するためのより簡単な方法があると思う。たぶん、サンプルデータと抽出したいデータを表示することができます。 –

+0

全体的に見ると、実行可能なクエリにかなり近いようです。 "cat"サブクエリには、修正が必要なインスタンスが2つあります。そのサブクエリには3つの部分が一緒にUNIONされています - 最初の部分で 'user_id IN'(正しい)がありますが、2番目と3番目に '='があり、その2つの部分でも 'IN'を使う必要があります。 – SlimsGhost

+0

内部クエリの全体が機能しますが、別のレイヤの下に置くと機能しません。この問題は、 "="演算子ではなく、最初のクエリに含まれていない情報に対して同じテーブルをフィルタリングする別の方法です。 –

答えて

0

です。

つまり、rを構成する定義で最終結果rを参照することはできません。

各サブクエリから始めて、コードがそれ自身のもので動作するかどうかを確認してください。 - rが参照される場合のように、別の解決策を考える必要があります。出力のuser_idを返します。

申し訳ありません申し訳ありませんが、ソリューション自体ではなく、問題を解決する方法しかありません。 Timのように、私はあなたのためにクエリを編集しようとしましたが、それは長すぎるので、最良のソリューションを知るためにはデータ構造全体を知る必要があります。

+0

私は助けに感謝します。 –

+0

すべてのサブクエリコードは単独で動作しますが、後でデータベースのサンプルを提供しようとします。 –

+0

それだけで、あなたの主要な労働組合の声明はそれ自身で機能するはずです。つまり、r内のデータを参照するべきではなく、後でそれらの参照を入れることはできません。 – Matijs

関連する問題