Python SQL - 两个左连接

标签 python mysql sql woocommerce mysql-connector-python

我在 Python 的 SQL 方面遇到了一些问题,我希望你能帮助我 - 我正在尝试从 wordpress/woocommerce 检索一些数据。

我的代码:

    cursor.execute("
    SELECT t1.ID, t1.post_date, t2.meta_value AS first_name, t3.meta_value AS last_name
    FROM test_posts t1 
    LEFT JOIN test_postmeta t2 
    ON t1.ID = t2.post_id 
    WHERE t2.meta_key = '_billing_first_name' and t2.post_id = t1.ID 
    LEFT JOIN test_postmeta t3 
    ON t1.ID = t3.post_id 
    WHERE t3.meta_key = '_billing_last_name' and t3.post_id = t1.ID 
    GROUP BY t1.ID 
    ORDER BY t1.post_date DESC LIMIT 20")

我收到以下错误:

    mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN test_postmeta t3 ON t1.ID = t3.post_id WHERE t3.meta_key = '_billing' at line 1

我做错了什么?

提前致谢。

最佳答案

在 GROUP BY 之前应该只有 1 个 WHERE 子句。
但是由于您使用 LEFT 联接,在 right 表上设置一个条件,例如 t2.meta_key = '_billing_first_name',您得到的是 INNER 联接,因为您拒绝了不匹配的行。
所以在 ON 子句中设置所有条件:

cursor.execute("
SELECT t1.ID, t1.post_date, t2.meta_value AS first_name, t3.meta_value AS last_name
FROM test_posts t1 
LEFT JOIN test_postmeta t2 
ON t1.ID = t2.post_id AND t2.meta_key = '_billing_first_name'
LEFT JOIN test_postmeta t3 
ON t1.ID = t3.post_id AND t3.meta_key = '_billing_last_name'
GROUP BY t1.ID 
ORDER BY t1.post_date DESC LIMIT 20")

尽管此查询对于 MySql 在语法上可能是正确的,但使用 GROUP BY 没有意义,因为您没有进行任何聚合。

关于Python SQL - 两个左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59147542/

相关文章:

php - perl 样式正则表达式 mysqldump 列定义

PHP/Mysqli 插入语句不写入数据库

SQL - 划分一个值并确保它重新计算为原始值

python - QWebEngineUrlRequestInterceptor 不工作

python - Django : How to handle css/js specific to a template tag?

python - Flask 请求对象始终为空(GET 和 POST)

php - 每个指定日期的 SQL 查询计数

python - 尝试在Python中删除相同数字的倍数

php - 查询列在另一个表中的位置 - laravel

php - 我如何查询wordnet数据库(mysql)以获取一个词的所有同义词和相似词?