0

複雑な INNER JOIN SQL リクエストがあり、頭を包み込むことができません。誰かが私を助けてくれることを望んでいました。これには 3 つのテーブルが含まれるため、2 つの内部結合があります。

私のデータベースには、「users」、「statement」、「opinion」というテーブルがあります。

ユーザーは、ステートメントや意見を作成できます。意見には、それが表すユーザーの ID を参照する「authorid」変数と、参照するステートメントを参照する「statementid」変数があります。

2 つのステートメントが与えられた場合、両方のステートメントについて意見を書いたユーザーのリストを返すことができるリクエストを送信しようとしています。

みたいなことを考えている

$sid1=5;
$sid2=6;
$sql = "
        SELECT user.*
        FROM users
        INNER JOIN opinion
        ON opinion.authorid=user.uid 
        WHERE opinion.statementid=  [sid1?  how can i use both]
        INNER JOIN statement
        ON statment.uid=opinion.statementid
        ";

しかし、ご覧のとおり、私は立ち往生しています。UNIONは必要ですか?さらに明確にする必要がある場合はお知らせください。

前もって感謝します。

編集:私はそれを行う方法を考え出した:

SELECT DISTINCT users.uid
FROM users
JOIN opinion o, opinion o2
WHERE users.uid = o.authorid
AND users.uid = o2.authorid
AND o2.statementid = $sid2
AND o.statementid = $sid1
4

4 に答える 4

2
  SELECT DISTINCT user.*
  FROM opinion o 
  JOIN usrs u 
       ON u.uid = o.author_id
      AND o.statement_id = $sid1
  INTERSECT
  SELECT DISTINCT user.*
  FROM opinion o 
  JOIN usrs u 
       ON u.uid = o.author_id
      AND o.statement_id = $sid2

SQL ダイアレクトで INTERSECT を使用できませんか?

SELECT A.* FROM (
  SELECT DISTINCT user.*
  FROM opinion o 
  JOIN usrs u 
       ON u.uid = o.author_id
      AND o.statement_id = $sid1
) A
JOIN (
  SELECT DISTINCT user.*
  FROM opinion o 
  JOIN usrs u 
       ON u.uid = o.author_id
      AND o.statement_id = $sid2
) B on A.uid = B.uid
于 2013-07-06T00:29:59.717 に答える
0

2回リンクできるはずです。

SELECT user.*
FROM users u. opinion o1, statement s1
     , opinion o2, statement s2 
WHERE o1.authorid=user.uid 
AND o2.authorid = user.uid
AND o1.statement_id = s1.sid
AND o2.statementid = s2.sid
AND s1.sid = $sid1
AND s2.sid = $sid2
于 2013-07-06T00:29:30.030 に答える
0

これはあなたが望むクエリだと思います:

   SELECT u.*
   from opinion o join
        users u
        on o.authorid = u.uid join
        statement s
        on o.statementid = s.sid
   where s.sid in (<list of statement ids>);

データ構造の説明は少し混乱しています。opinionしかし、著者とステートメントを持つことが重要な関係であると推測しています (そして、statementそれに関連付けられた個別のユーザー ID はありません)。

于 2013-07-06T00:42:53.030 に答える
0
SELECT DISTINCT users.uid
FROM users
JOIN opinion o, opinion o2
WHERE users.uid = o.authorid
AND users.uid = o2.authorid
AND o2.statementid = $sid2
AND o.statementid = $sid1
于 2013-07-09T21:42:42.373 に答える