2014-07-16 1 views
0

У меня есть вопрос относительно Соединительные столы.C# T-SQL Join и Union

У меня одиннадцать таблиц, один родитель с десятью дочерними таблицами. Первичный ключ для всех - это EventName с отношением from parent к child, являющимся EventName. Имена дочерних таблиц: SR1Laptimes, SR2Laptimes и т. Д. X 10.

Схема в дочерних таблицах одинакова. Я пытаюсь присоединиться к таблице событий в 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); 

ответ

4

Я думаю, что вы пропускаете UNION ALL пункт по адресу:

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

я имел его там, но до сих пор нет радости – Kringle

0

ли таблицы вы пытаетесь «союз все» имеют одинаковые столбцы? Это может быть проблемой.

Предложение 'where' в конце действительно только для SR3Laptimes.

+0

Ребенок таблицы не идентичны в столбцах, типы данных и число столбцов. – Kringle

+0

Я попытался поместить объединение и объединение в различные структуры с помощью круглых скобок, но это не помогло (касается предложения where) – Kringle

0

Этот пример может помочь вам.

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