这是一个简单的查询,我在我自己的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角度来看这个问题的最佳方法是什么 - 我是在咆哮错误的树吗?
删除子查询并对主查询进行连接仍然会导致记录不匹配。
答案 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
中子查询中的任何内容都不会更改行数。