SUBQUERY和INNER JOIN - MySQL和SQL之间的差异

时间:2018-05-09 12:02:05

标签: mysql sql

这是一个简单的查询,我在我自己的MySQL数据库中使用了它(使用LIMIT 1而不是TOP 1)不同的时间:

SELECT
    j1.status AS "Status",
    j1.number AS "Number",
    (
        SELECT TOP 1
            i2.invoicedDate
        FROM invoices AS i2
        INNER JOIN jobs AS j2 ON i2.jobKey = j2.id
        WHERE
            j1.id=j2.id
            AND
            j2.status = 'INVOICED'
    ) AS "Invoiced Date"
FROM jobs AS j1

假设om.jobGroup表中有183,000行,在MySQL中,结果将返回所有183,000个结果 - 如果子查询中没有匹配,则返回NULL

当我在Microsoft SQL服务器中运行相同的查询时;它不仅需要更长的时间,而且只能返回1700条记录吗?

从SQL角度来看这个问题的最佳方法是什么 - 我是在咆哮错误的树吗?

删除子查询并对主查询进行连接仍然会导致记录不匹配。

1 个答案:

答案 0 :(得分:0)

假设id是唯一的,我认为在任一数据库中你想要的查询是这样的:

SELECT j1.status AS "Status", j1.number AS "Number",
       (SELECT TOP 1 i2.invoicedDate
        FROM invoices i2
        WHERE i2.jobKey = j1.id AND j1.status = 'INVOICED'
       ) Invoiced_Date
FROM jobs j1;

通常情况下,TOP / LIMIT会与ORDER BY一起使用。

SELECT中子查询中的任何内容都不会更改行数。