我在MySQL中使用PeeWee。我有两个需要完全连接的表,以保留左侧和右侧的记录。 MySQL不直接支持此功能,但是我在此有用的文章-http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/中使用了“方法2”来创建似乎适用于我的数据的Full Join SQL语句。
使用第二个结果集中的重复数据,它要求“左外连接”和“右外连接”的“所有连接”。
我要匹配两个表中的备份磁带条形码。
的SQL
SELECT * FROM mediarecall AS mr
LEFT OUTER JOIN media AS m ON mr.alternateCode = m.tapeLabel
UNION ALL
SELECT * FROM mediarecall AS mr
RIGHT OUTER JOIN media AS m ON mr.alternateCode = m.tapeLabel
WHERE mr.alternateCode IS NULL
但是,当我开始使用PeeWee将其引入python脚本时,我发现似乎没有允许我重新创建此SQL的JOIN.RIGHT_OUTER。我过去曾大量使用过JOIN.LEFT_OUTER,但这是我第一次需要完全加入。
当然,我可以使PeeWee与RawQuery()一起工作,但是如果可以的话,我希望使代码看起来更优雅。
有没有人设法借助MySQL和PeeWee重新创建完全联接,而无需诉诸RawQuery?
我曾设想过类似以下的事情(我知道这是无效的):
left_media = (MediaRecall
.select()
.join(Media,JOIN.LEFT_OUTER,
on=(MediaRecall.alternateCode == Media.tapeLabel)
)
)
right_media = (MediaRecall
.select()
.join(Media,JOIN.RIGHT_OUTER,
on=(MediaRecall.alternateCode == Media.tapeLabel)
)
)
.where(MediaRecall.alternateCode >> None) # Exclude duplicates
all_media = ( left_media | right_media) # UNION of the 2 results, which I
# can then use .where(), etc on
最佳答案
您可以添加对右外部的支持:
from peewee import JOIN
JOIN['RIGHT_OUTER'] = 'RIGHT OUTER'
然后,您可以使用
JOIN.RIGHT_OUTER
。关于python - 没有RawQuery的MYSQL PeeWee完全连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34787309/