【问题标题】:C# T-SQL Join and UnionC# T-SQL 连接和联合
【发布时间】:2014-07-16 10:10:02
【问题描述】:

我有一个关于加入表格的问题。

我有 11 个表,一个父表和 10 个子表。 主键是 EventName,父子关系也是 EventName。子表名称为 SR1Laptimes、SR2Laptimes 等 x 10。

子表中的架构是相同的。我正在尝试将 Events 表加入 SR1Laptimes,然后将所有子表联合在一起,但无法使其正常工作。

这种疯狂背后有一种方法,但需要一些时间来解释。无论如何,这是代码,任何反馈将不胜感激。 P.S 本次复制粘贴中未完成的代码。

myCommand.CommandText = "SELECT MIN(Q1), MIN(Q2), MIN(Q3), MIN(Q4), MIN(LaptimesMinutes), MIN(LaptimesSeconds) FROM Events LEFT JOIN SR1Laptimes ON Events.EventName = SR1Laptimes.EventName SELECT * FROM SR1Laptimes UNION ALL SELECT * FROM SR2Laptimes UNION ALL SELECT * FROM SR3Laptimes WHERE (Events.Track = @track) AND (Events.Number = @number) AND (Events.Rider = @rider)";
myCommand.Parameters.AddWithValue("@track", analysisTrackComboBox.Text);
myCommand.Parameters.AddWithValue("@number", analysisNumberComboBox.Text);
myCommand.Parameters.AddWithValue("@rider", analysisRiderComboBox.Text);

【问题讨论】:

    标签: c# sql join union-all


    【解决方案1】:

    我认为您在以下位置缺少UNION ALL 子句:

     ... ON Events.EventName = SR1Laptimes.EventName *HERE* SELECT * FROM SR1Laptimes ...
    

    【讨论】:

    • 我确实有它,但仍然没有快乐
    【解决方案2】:

    您尝试“联合所有”的表是否具有相同的列?这可能是问题所在。

    最后的“where”子句仅对 SR3Laptimes 有效。

    【讨论】:

    • 子表在列、数据类型和列数上完全相同。
    • 我尝试使用括号将联接和联合放在各种结构中,但没有帮助(关于 where 子句)
    【解决方案3】:

    这个例子可能会对你有所帮助。

    DECLARE @Parent TABLE (id INT,sth NVARCHAR(100))
    
    DECLARE @ChildTest1 TABLE(id INT,parentId INT, sth NVARCHAR(100))
    
    DECLARE @ChildTest2 TABLE(id INT, parentId INT, sth NVARCHAR(100))
    
    INSERT INTO @Parent
    SELECT 1,'Ali'
    UNION ALL
    SELECT 2,'Veli'
    UNION ALL
    SELECT 3,'Ahmet'
    
    
    INSERT INTO @ChildTest1
    SELECT 1,1,'Parent1_Child1_1strow'
    UNION ALL
    SELECT 2,1,'Parent1_Child1_2ndrow'
    UNION ALL
    SELECT 3,2,'Parent2_Child1_1strow'
    
    
    INSERT INTO @ChildTest2
    SELECT 1,1,'Parent1_Child2_1strow'
    UNION ALL
    SELECT 2,2,'Parent2_Child2_1strow'
    UNION ALL
    SELECT 3,3,'Parent3_Child2_1strow'
    
    SELECT * FROM @Parent p
    LEFT JOIN (
        SELECT * FROM @ChildTest1 ct1
    
        UNION ALL
    
        SELECT * FROM @ChildTest2 ct2
    ) s ON p.id =s.parentId
    --WHERE p.id = 3
    

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 2010-10-01
      • 2010-10-14
      相关资源
      最近更新 更多