簡體   English   中英

跨多個規范化表的 SQL 查詢設計

[英]SQL Query design across multiple normalized tables

表關系圖:

表關系圖

基本查詢是:

SELECT DateTime, SubgroupID, TestID 
FROM Subgroups 
WHERE CharID IN (SELECT CharID FROM CharList WHERE ChartType = 2) AND PtLoc > 0

然后我將遍歷記錄集以獲取其他信息:

SELECT DefectDescription, Value 
FROM DefectDescriptions, DataValues 
WHERE SubgroupID = (SubgroupID from above) AND DefectID = SampleNumber 

對於上面的每條記錄:

SELECT TextValue AS PartNum 
FROM ParameterEntries 
WHERE 
    TestID = (TestID from above) 
    AND ParameterID = (SELECT ParameterID FROM ParameterDefinitions WHERE ParameterName = "PartNum")

SELECT TextValue AS SerialNum  
FROM ParameterEntries 
WHERE 
    TestID = (TestID from above) 
    AND ParameterID = (SELECT ParameterID FROM ParameterDefinitions WHERE ParameterName = "SerialNum")

要構建表:

DateTime, PartNum, SerialNum, DefectDescription, Value(number of defects)

這可以在單個查詢中完成,而不是遍歷每條記錄以從鏈接表中獲取記錄嗎?

如果您加入表,您可以將其作為一個查詢進行

SELECT
    Subgroups.DateTime, DefectDescriptions.DefectDescription, DataValues.Value,
    Subgroups.TestID, Count(*) AS NumberOfDefects,
    MAX((SELECT MAX(E.TextValue)
           FROM ParameterDefinitions AS D
           INNER JOIN ParameterEntries AS E ON D.ParameterID = E.ParameterID
           WHERE D.ParameterName="PartNum" AND E.TestID=Subgroups.TestID)
          ) AS PartNum,
    MAX((SELECT MAX(E.TextValue)
           FROM ParameterDefinitions AS D
           INNER JOIN ParameterEntries AS E ON D.ParameterID = E.ParameterID
           WHERE D.ParameterName="SerialNum" AND E.TestID=Subgroups.TestID)
          ) AS SerialNum
FROM
    DefectDescriptions
    INNER JOIN DataValues
        ON DefectDescriptions.DefectID = DataValues.SampleNumber
    INNER JOIN Subgroups
        ON DataValues.SubgroupID = Subgroups.SubgroupID
    INNER JOIN CharList
        ON CharList.CharID = Subgroups.CharID
WHERE
    CharList.CharType=2 AND Subgroups.PtLoc>0
GROUP BY
    Subgroups.DateTime, DefectDescriptions.DefectDescription,
    DataValues.Value, Subgroups.TestID;

如果您將此作為 SQL(在 SQL 視圖中)復制/粘貼到查詢設計器中,您將看到在切換回設計視圖時表是如何連接的。 這兩個參數是通過子查詢選擇的。

您還必須使用 GROUP BY 子句才能使用Count(*)缺陷Count(*)

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM