sql - 将 SQL 重写为 JOINS 而不是子查询

标签 sql mysql join subquery

我在重写此查询以使用连接而不是两个子查询时遇到了一些麻烦。如果你明白我的意思,我在理清它时遇到了问题。

SELECT o.order_id, n.title, c.first_name, t1.name, o.product_id,
    (SELECT ttd2.tid FROM term_data ttd2, term_node ttn2 WHERE ttd2.vid = 5 AND ttn2.nid = p.nid AND ttd2.tid=ttn2.tid) AS tid,
    (SELECT ttd4.name FROM term_data ttd4, term_node ttn4 WHERE ttd4.vid = 8 AND ttn4.nid = p.nid AND ttd4.tid=ttn4.tid) AS month
    FROM orders o, products p, node n, customers c, term_data t1, term_node t2
    WHERE o.product_id = p.nid
    AND p.nid = n.nid
    AND o.customer_email = c.customer_email
    AND t2.tid = t1.tid
    AND t1.vid = 6
    AND n.nid = t2.nid

你能帮忙吗?或者给一些线索/提示。

最佳答案

使用 ANSI SQL-92 重写它语法(即使用 JOIN 和 ON 子句),它应该更加清晰。

现在所有的 JOINWHERE 子句混合在一起,因此不容易看出它们之间的关系。子查询不一定是问题;清理语法后,这应该会变得更加清楚。

关于sql - 将 SQL 重写为 JOINS 而不是子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144645/

相关文章:

c# - 如何将我的 wpf 应用程序连接到在线数据库?

sql - 将同一个表中的多行合并到一个表中

mysql - Coldfusion MYSQL 日期查询参数不返回结果

Mysql JSON_MERGE_PATCH 正在完全替换第一个 json

php - 如何在 sql 权限表中使用正则表达式

join - 如何使用 InfluxDB Flux 查询在 Grafana 中以特定方式合并(联接)两个表?

MySQL 连接表中连接列中有多个重复值

MySQL查询以匹配两个表之间的日期和空值

php - mysql 创建一个带有有序子菜单的菜单

mysql - 当我尝试在 MySQL 中创建表时,它给出错误代码 1215 : “Cannot add foreign key constraint”