私は顧客と私たちのクライアントがさまざまなテーブルから共通に持つすべてのIPカウントを見つけることを試みています。サブクエリで最も内側のほとんどのクエリは外側のほとんどのクエリにアクセスできないことはわかっていますが、それを回避するためにテーブルに結合する方法はわかりません。カラムWHERE句にr.user_idが見つかりません
ご協力いただければ幸いです。
テーブルの受注は、あなたの基本的な問題は、それが定義される前に、あなたが結果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
投稿を編集してから、4つのネストされたレイヤーを持つクエリがあることがわかったときに、その投稿を中止しました。私はあなたが望む情報を入手するためのより簡単な方法があると思う。たぶん、サンプルデータと抽出したいデータを表示することができます。 –
全体的に見ると、実行可能なクエリにかなり近いようです。 "cat"サブクエリには、修正が必要なインスタンスが2つあります。そのサブクエリには3つの部分が一緒にUNIONされています - 最初の部分で 'user_id IN'(正しい)がありますが、2番目と3番目に '='があり、その2つの部分でも 'IN'を使う必要があります。 – SlimsGhost
内部クエリの全体が機能しますが、別のレイヤの下に置くと機能しません。この問題は、 "="演算子ではなく、最初のクエリに含まれていない情報に対して同じテーブルをフィルタリングする別の方法です。 –