多个表

时间:2017-05-16 18:29:02

标签: sql tsql select nested subquery

我的数据库包含表格 GridData FormList FormData

我需要从 FormData 表中提取一个名为 Value 的字段,但无法弄清楚如何构建查询。我可以逐个运行它,它会给我结果,但需要将它们一起包含在表输出中。

当我逐步运行查询时,查询是:

GridData 中选择*,其中GridName ='uwg' - 返回:

FormId      GridName        Example Field
1244135     uwg             9
1244135     uwg             10
1244135     uwg             11
1244135     uwg             7
1244135     uwg             66

使用 FormID 字段,我查找 FormList

FormList 中选择*,其中FormID = 1244135 - 返回:

JobId       FormName        FormId
1241899     ExampleForm     1244135

然后从上面查询其中FormID = JobID的SAME FormList 表。

FormList 中选择*,其中FormID = 1241899 - 返回:

JobId       FormName        FormId
1241894     ExampleForm2    1241899

AGAIN .. 查询上面的FormID = JobID的SAME FormList 表格。

FormList 中选择*,其中FormID = 1241894 - 返回:

JobId       FormName        FormId
1241893     ExampleForm3    1241894

此结果中的JobID是我需要在 FormData 表中引用的ID,以返回我需要的值...

FormData 中选择,其中FormID = 1241893,而Name ='ProductName' - 返回:

Value
12345

我的目标是能够从 GridData 表中返回所有值,并在 FormData “值”字段中输入相应的条目。

我真的在努力学习如何编写这个查询!

我尝试过以下操作,但它会返回多个重复的条目。 字段包含多种数据类型,我只对此表中的值感兴趣,其中 FormData.Name ='ProductName'

SELECT	Value,
        RecordId,
	GridData.FormId,
	GridName,
	ExampleField
      
  FROM	GridData

  JOIN	FormData

  ON	GridData.FormId = FormData.FormID
   
  WHERE GridData.FormId IN

  (SELECT FormList.FormId FROM FormList WHERE FormList.FormId IN 
  (SELECT FormList.FormId FROM FormList WHERE FormList.FormId IN 
  (SELECT FormList.FormId FROM FormList WHERE FormList.FormId IN 
  (SELECT FormData.FormID FROM FormData))))

  AND FormData.DataItemName = 'JobProductName'

4 个答案:

答案 0 :(得分:1)

"INSERT INTO tbl_order (total_price, credit_card_number, fname, email, address, phone, city) 
    VALUES ('$cTotal', '$cNumber', '$cName', '$cEmail', '$cAdress', '$cPhone', '$cCity')"

答案 1 :(得分:0)

SELECT        GD.*
              ,FD.value
    FROM      GridData GD
LEFT JOIN     FormList FL
           ON GD.FormID = FL.FormID
LEFT JOIN FormList FL1
           ON FL.JobID = FL1.FormID
LEFT JOIN FormData FD
           ON FL1,JobID = FD.FormID
    WHERE GD.GridName = 'uwg'
      AND FormData.DataItemName = 'JobProductName'

答案 2 :(得分:0)

您可以尝试逐级运行以下查询吗?

第一级仅 GridData (第14-16行),下一级是(11-17),然后重复直至顶部。这样一来,如果出现问题,您可以在 时检查。无论是那个还是你达到顶级无问题:)

也许它可以被更好地重写,但是现在让我们至少得到一个可行的版本。

SELECT [Value] -- 12345
FROM FormData
WHERE [Name] = 'ProductName'
  AND FormID IN (
    SELECT JobId -- 1241893
    FROM FormList
    WHERE FormID IN (
        SELECT JobId -- 1241894
        FROM FormList
        WHERE FormID IN (
            SELECT JobId -- 1241899
            FROM FormList
            WHERE FormID IN (
                SELECT FormId -- 1244135
                FROM GridData
                WHERE GridName = 'uwg'
            )
        )
    )
)

答案 3 :(得分:0)

我设法提取数据的查询是:

Select  FD.Value, G.*
FROM    GridData G

JOIN FormList FL1 ON FL1.FormID = G.FormID
JOIN FormList FL2 ON FL1.JobID = FL2.FormID
JOIN FormList FL3 ON FL2.JobId = FL3.FormID
JOIN FormData FD ON FL3.JobId = FD.FormID

WHERE FD.DataItemName = 'ProductNameHere' and G.GridName = 'GridNameHere'

以下帖子有助于得出这个结论 - 谢谢大家。