1

私は次のクエリを持っています:

SELECT * FROM questions 
LEFT JOIN answers ON (questions.id = answers.id AND (connections.username = answers.username OR connections.username = 'bob' OR answers.username IS NULL))
LEFT JOIN connections ON connections.username1 = 'mikha' AND
                         (connections.username2 = answers.username) 
LEFT JOIN answers answers2 ON (questions.id = answers2.id)
WHERE (answers.id <> answers2.id)

次のエラーが発生します。

`Unknown connections.username in ON clause`

最初の結合でいくつかの条件を定義し、これらの条件に一致しない残りを取得したいと思います。そのため、この部分を使用しますanswers.id AND answers2.id。最初の左結合の条件に一致しないIDを取得します。

ありがとう

4

2 に答える 2

1

このように試してみてください。自分でテストするスキーマはありませんが、機能するはずです(またはこのようなもの)

SELECT * FROM questions, connections
LEFT JOIN answers ON (questions.id = answers.id AND
                     connections.username2 = answers.username)
where connections.username1 = 'mikha';

最終的にはこのように

SELECT * FROM questions
LEFT JOIN answers ON (questions.id = answers.id)
LEFT JOIN connections ON (connections.username2 = answers.username)
where connections.username1 = 'mikha';

編集:私はこれをドキュメントで見つけました

例:

CREATE TABLE t1(i1 INT); CREATE TABLE t2(i2 INT); CREATE TABLE t3(i3 INT); SELECT * FROM t1 JOIN t2 ON(i1 = i3)JOIN t3;

以前は、SELECTステートメントは有効でした。i3はt3の列であり、ON句のオペランドではないため、ステートメントは「on句」の「不明な」列「i3」エラーで失敗します。ステートメントは次のように書き直す必要があります。

SELECT * FROM t1 JOIN t2 JOIN t3 ON(i1 = i3);

だからあなたの場合それはかもしれません

SELECT * FROM questions  
LEFT JOIN connections
LEFT JOIN answers ON (connections.username1 = 'mikha' AND questions.id = answers.id AND
                 connections.username2 = answers.username)
于 2012-12-09T01:26:19.660 に答える
1

事実上、接続の結果によって回答の結果を制限する場合、nullはnullと等しくないため、一方の行がもう一方の行からの結果なしで戻ることができないため、2つの左結合ではなく内部結合を実行しています。これが真実であるとすると、あなたのスキーマが何であるか私にはわからないので、あなたは以下を使うことができます。すべてのスキーマは無実を保護するために作られました。

SELECT * FROM questions 
left join (
    select connections.otherstuff,answers.id,answers.text from connections 
    inner join answers ON  connections.username2 = answers.username
    where connections.username1 = 'mikha'
 ) conn on questions.id = conn.id

http://sqlfiddle.com/#!2/c7252/1

于 2012-12-09T02:12:44.190 に答える