Member 13854008 Ответов: 1

Как объединить пять таблиц вместе и если какая-то одна таблица заполнена, а другие пусты, то в качестве вывода должна быть получена полная строка


как объединить 5 таблиц,и если одна таблица заполнена, а другие пусты, то мы можем получить эту строку . Каждая таблица имеет столбец с месяцем ,годом ,датой и T1

ЭКС:
MNTH  YEAR  DATE    T1    |    OMNTH  YEAR DATE T2
JAN   2017 22/1/17  CC    |    ....  .... ...  ..     etc.........


ТРЕБУЕМАЯ ПРОИЗВОДИТЕЛЬНОСТЬ

MNTH  YEAR  DATE    T1 T2 T3 T4 T5
 JAN   2017 22/1/17  CC .. .. .. ..


данные фильтруются по состоянию на дата (дата тым пикер)

Что я уже пробовал:

var qry = "
  SELECT month,T1,T2,T3,T4,T5 
  FROM T1 AS m 
   FULL JOIN T2 AS o ON m.month = o.omonth and m.year=o.year 
   FULL JOIN T3 AS s ON s.smonth = o.omonth and s.year=o.year 
   FULL JOIN T4 AS t ON t.tmonth = m.month and t.year=m.year 
   FULL JOIN T5 AS p ON p.spmonth=o.omonth and p.year=o.year where m.date between '" + 
   dateTimePicker6.Value.ToString("yyyy/MM/dd") + "' and '" + dateTimePicker5.Value.ToString("yyyy/MM/dd") + "'"


Он присоединяется к таблице и выдает только выходные данные, когда заполнены две или более таблиц.

Maciej Los

Звучит как неправильный дизайн базы данных!

CHill60

Почему у вас есть несколько таблиц с одной и той же схемой? Это плохой дизайн базы данных.
Вам нужно использовать ссылку улучшить вопрос, чтобы привести в порядок ваши образцы данных ... "и т. д." не помогает. Пока вы там включаете SQL в теги
Кроме того, не объединяйте строки для создания инструкций SQL - используйте параметризованные запросы - Шпаргалка по предотвращению инъекций SQL - OWASP[^]

Member 13854008

хорошо...тогда как объединить 5 таблиц вместе и как увидеть в datagrid, когда заполнена только одна таблица

Kornfeld Eliyahu Peter

1. Почему не все соединения, созданные между T1 и объединенной таблицей? Зачем его смешивать?
2. вы показываете ожидаемый результат, но не реальный (и почему это не хорошо)!

1 Ответов

Рейтинг:
2

Maciej Los

Если я вас хорошо понимаю...

Допустим, T1 содержит полные данные, а остальные таблицы - нет. Итак, чтобы иметь возможность получить все данные из T1 и соответствующие данные из T2 ... T5, вам нужно использовать другой тип соединения: LEFT JOIN.

Для получения более подробной информации, пожалуйста, смотрите: Визуальное представление SQL-соединений[^]

Примечание: ваш код является SQL-инъекция[^] уязвимый. Вам нужно использовать параметризованный запрос[^] чтобы избежать этого:
Свойство sqlcommand.Параметров Собственность (Системы.Данных.Поставщики sqlclient)[^]
Как предоставить значение параметру запроса[^]


Member 13854008

Таньку эта ссылка мне очень помогает... но у меня тоже есть одно сомнение
я выбираю месяц из первой таблицы ,так что если первая таблица пуста, то месяц не пришел туда вместо того, чтобы этот ноль можно было заполнить там. так что же делать, чтобы месяц тоже был там

Maciej Los

Всегда пожалуйста.
Вы должны добавить еще одну таблицу, которая будет содержать все месяцы.

Member 13854008

если мы добавим еще одну таблицу месяца ,то как каждый месяц войти туда и связать с другими таблицами