我是SQL的新手,最近开始对代码执行联接,可以使用以下SQL语句完成我希望检索的数据。但是,您知道SQLite3不支持RIGHT OUTER和FULL OUTER JOIN。
因此,我想使用LEFT OUTER JOINs重写此语句,因为仅支持这些语句,我们将不胜感激。
在继续将此问题标记为重复之前,我已经看过其他类似问题的答案,但是在重新排列查询以仅使用LEFT JOIN时,没有人解释一般规则。
我还认为,这个特定示例在表(句点)不能与任何一个表(teacher_subjects,classical_subjects)无法联接的意义上稍有不同。
FROM P
LEFT JOIN CP
ON P.PID = CP.PID
RIGHT JOIN CS
ON CP.CID = CS.CID
RIGHT JOIN TS
ON CP.TID = TS.TID
WHERE (CP.CID IS NULL
AND CP.TID IS NULL)
ORDER BY P.PID;
毫不奇怪,我从运行此查询中得到的错误是:
sqlite3.OperationalError: RIGHT and FULL OUTER JOINs are not currently supported
如果我真的很傻,请提前抱歉,但是如果您需要任何其他信息,请询问。非常感谢。
答案 0 :(得分:1)
忽略列顺序,x right join y on c
是y left join x on c
。通常明确指出这一点。 (但您也可以将连接的定义应用于原始表达式,以获取具有所需值的子表达式。)您可以阅读from
语法,以了解如何在括号或子查询中获得优先级。应用身份,我们得到ts left join (cs left join (p left join cp on x) on y) on z
。
类似地,忽略列顺序,x full join y on c
是y full join x on c
。用full join
和left join
表示right join
是常见的重复内容。