SQL iReport 中的 subSelect 语句问题

SQL subSelect Statement issue in iReport

我正在使用 iReport 编写自定义报告并 运行 遇到问题。

我试图通过添加以下代码行来更改现有报告:

LEFT JOIN (select info from customfieldview where cftableid = 97022306 and recordid = so.id and cfname = 'SIN')

字段和 table 名称都是正确的,但无论出于何种原因,它都说我的 "WHERE" 语句一团糟。对于 iReport,它的调试器通常说问题是实际问题下方的行,而我的 WHERE 语句之前的行恰好是我的 subSELECT 语句。

我会 post 我的 SQL 和一张照片突出我的问题。

我的 subSelect 语句格式不正确吗?

SELECT (case when $P{ckShowHistoricalProductNumber} = 1 then soitem.productnum else product.num end) AS soitemproductnum, soitem.description AS soitemdescription,
(case when soitem.uomid != product.uomid then ((postsoitem.qty*uomconversion.multiply)/uomconversion.factor) else postsoitem.qty end) AS postsoitemqty,
producttree.name AS producttreename,
(CASE WHEN soitem.uomid != product.uomid then (soitem.unitprice/uomconversion.multiply)*uomconversion.factor else soitem.unitprice end) + (soitem.adjustamount / (CASE WHEN soitem.qtytofulfill = 0
                                                        THEN 1
                                                        ELSE soitem.qtytofulfill END)) AS soitemunitprice, soitem.typeid AS soitemtypeid,
company.name AS company, uom.code AS uomcode, currency.symbol

FROM soitem
LEFT JOIN postsoitem ON soitem.id = postsoitem.soitemid
JOIN postso on postsoitem.postsoid = postso.id
JOIN product ON soitem.productid = product.id
LEFT JOIN producttotree ON product.id = producttotree.productid
LEFT JOIN producttree ON producttotree.producttreeid = producttree.id
LEFT JOIN uom ON product.uomid = uom.id
LEFT JOIN uomconversion on product.uomid = uomconversion.touomid and soitem.uomid = uomconversion.fromuomid
INNER JOIN company ON company.id = 1
LEFT JOIN currency ON currency.homeCurrency = 1
LEFT JOIN (select info from customfieldview where cftableid = 97022306 and recordid = so.id and cfname = 'SIN')

WHERE postso.postdate BETWEEN $P{dateRange1} AND $P{dateRange2}
AND soitem.typeid IN (10,11,12,21,30,31,40,50,60,70,80)
AND ((COALESCE(producttreeid,0) IN ($P!{productTree1})) OR ((COALESCE(producttreeid,0) LIKE $P{productTree2})))
AND (CASE WHEN $P!{ckShowEachProductOnce} =1 then (Select first 1 producttree.id
       FROM product AS p1
       LEFT JOIN producttotree ON p1.id = producttotree.productid
       LEFT JOIN producttree ON producttotree.producttreeid = producttree.id
       WHERE p1.id = product.id
       AND ((COALESCE(producttreeid,0) IN ($P!{productTree1})) OR ((COALESCE(producttreeid,0) LIKE $P{productTree2})))) else producttree.id end) = producttree.id

原来问题出在我编写 subQuery 的方式上。

我正在使用 LEFT JOIN (select info from customfieldview where cftableid = 97022306 and recordid = so.id and cfname = 'SIN')

并说它是一个 subQuery 而实际上是因为它被用在 FROM condition/arguement 那么它实际上是一个 派生Table.

我不知道有什么不同!

感谢大家的意见和有用的提示!