我有以下查询:
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。
谢谢
像这样尝试,我没有架构来自己测试它,但我觉得它应该可以工作(或类似的东西)
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';
编辑:我在文档中找到了这个
例:
创建表 T1(i1 整数); 创建表 T2(i2 整数); 创建表 T3(i3 整数); 选择 * 从 T1 加入 T2 打开 (i1 = i3) 加入 t3;
以前,SELECT 声明是合法的。现在,该语句失败,并显示"on 子句"中的未知>列"i3"错误,因为 i3 是 t3 中的列,它不是>ON 子句的操作数。该语句应重写如下:
选择 * 从 T1 加入 T2 加入 T3 打开 (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)
实际上,如果您通过连接结果来限制答案的结果,那么您正在执行内部连接而不是两个左连接,因为一行无法返回另一行的结果,因为 null 不等于 null。 鉴于这是真的,您可以使用以下内容,因为我不知道您的架构是什么,所有架构都是为了保护无辜者而编造的。
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