Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Заблокирован
1

Как если связные данные заведомо неизвестны выдать в результирующий запрос что-то вместо них?

29.08.2012, 14:07. Просмотров 812. Ответов 6
Метки нет (Все метки)


Всем доброго времени суток.

Расширяю существующую БД. Добавляю столбцы и прочее. Информация во вновь добавленых столбцах в существуюших записях будет заполнена нулями или NULL, в тех записях что будут добавляться будут уже реальные данные. Записи обрабатываются в несколько заходов и вперемешку.
Конкретно: в основную таблицу добавляются ID юзеров которые производили то или иное действие(столбцы с временем действий уже были ранее). В предыдущих записях ID юзера будет "0", в последующих реальные ID. Как в запросах выводить и те и другие записи вместе, только в записях где ID юзера неизвестно, писать что-то? Например, возвращать вместо ФИО "0", я буду программно анализировать и в таких случаях писать "нет данных". Хотелось бы без лишних подзапросов и сложных конструкций.

Как-то так.

Сделал следующий запрос для отображения в Датагриде(и здесь, я надеюсь, примерно правильно выборка из таблицы Users двух возможно разных юзеров):
SQL
1
2
3
4
5
SELECT [поля из таблицы Results], [другие поля других таблиц], 
   Users1.Name AS Name1, Users2.Name AS Name2 
FROM Results, [другие таблицы], Users AS Users1, Users AS Users2 
WHERE [другие условия] AND Results.User1ID=Users1.ID AND Results.User2ID=Users2.ID 
ORDER BY Results.ID DESC LIMIT 50
Таблица Results:
ID записи[всякие поля]время действия 1ID юзера сделавшего действие 1время действия 2ID юзера сделавшего действие 2
Таблица Users:
IDName[всякие поля]
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2012, 14:07
Ответы с готовыми решениями:

Что написать вместо знаков ? Если пользователь введёт на цифру а другой символ. как выдать на экран Ошибку ?
cout << "Введите действительную часть комплексного числа" << endl; cin >> a; if ( ??? ) ...

Запрос по всем столбцам, которые неизвестны + один из них должен быть вычисляемым
Всем доброго времени суток. Столкнулся с такой проблемой: Есть таблица со столбцами(около 100 шт.)...

Как объявить вектор векторов, если размеры изначально неизвестны?
Как правильно объявить вектор векторов, если размеры изначально неизвестны? и как заносить значения...

Почистить ненужные данные с List'a если они если в них присутствуют (парсинг сайта)
Подскажите плз или покажите плз... Получил в List спаршенные данные с сайта по условию .InnerHtml...

6
Модератор
3872 / 2846 / 544
Регистрация: 21.01.2011
Сообщений: 12,344
29.08.2012, 14:22 2
IFNULL
0
Заблокирован
29.08.2012, 15:54  [ТС] 3
Подскажите, как его применить к алиасам?
Следующим образом не идет:
SQL
1
2
3
4
SELECT Results . * , IFNULL( Users1.Name, 0 ) AS Name1
FROM Results, Users AS Users1
WHERE Results.User1ID = IFNULL( Users1.ID, 0 )
ORDER BY Results.id DESC
0
Модератор
3872 / 2846 / 544
Регистрация: 21.01.2011
Сообщений: 12,344
29.08.2012, 16:06 4
1. что значит "не идет"?
выдает ошибку или возвращает не то, что нужно

2.
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
WHERE Results.User1ID = IFNULL( Users1.ID, 0 )
Вот это я не очень понял. В случае, если в таблице Users стоит NULL, нужно из таблицы Results возвращать записи с user1Id = 0 ?

3. какой смысл в подобных алиасах? Я бы понял, когда длинное имя таблицы заменялось на 1-2 буквы
1
Заблокирован
29.08.2012, 16:40  [ТС] 5
1. Вибирает записи только с ненулевым юзером.
2. Нужно выбрать все записи что имеются в Results и ограничиться только другими условиями запроса. Если указано в Results user1Id > 0 выдать его Name(ФИО) с таблицы Users, в противном случае хоть чем-то забить ячейку.
3. Нужно выбирать несколько юзеров для одной результирующей записи по их ID, которых нет в предыдущих данных в БД.

Создавать несуществующего юзера в таблице Users нецелесообразно, т.к. администраторы программы непременно воспользуются функцией удаления его и то что сейчас есть в базе станет недоступным.
0
349 / 253 / 26
Регистрация: 31.05.2012
Сообщений: 680
29.08.2012, 18:51 6
Лучший ответ Сообщение было отмечено как решение

Решение

T-SQL
1
2
3
4
SELECT Results.*,CASE WHEN Users.ID IS NULL THEN 'нет' ELSE Users.Name END AS Name1
  FROM Results
    LEFT JOIN Users ON Results.User1ID=Users.ID
  ORDER BY Results.id DESC
1
Заблокирован
30.08.2012, 09:35  [ТС] 7
Вроде получилось для двух юзеров, спасибо.
SQL
1
2
3
4
5
6
7
SELECT Results.*
   , CASE WHEN Users1.ID IS NULL THEN 'нет' ELSE Users1.Name END AS Name1
   , CASE WHEN Users2.ID IS NULL THEN 'нет' ELSE Users2.Name END AS Name2
FROM Results
LEFT JOIN Users AS users1 ON Results.User1ID=Users1.ID 
LEFT JOIN Users AS users2 ON Results.User2ID=Users2.ID
ORDER BY Results.id DESC
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2012, 09:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как отображать связные данные
Здравствуйте. Подскажите пожалуйста как на datagridview отображать связные данные. ...

Выдать запрос на сохранение текста в файл, если TextBox не пуст
Я только начинаю изучать программирование, поэтому не пинайте за нубские вопросы))) В некоторых...

Если в массиве есть отрицательные элементы, то подставьте вместо них среднее арифметическое
Народ помогите пожалуйста !! Дан массив t1....t20. Если в нем есть отрицательные элементы, то...

Выдать все четные числа от 0 до 10000, если х = 0; иначе выдать x^5
Задается значение х. Выдать, все четные числа от 0 до 10000 если х = 0 иначе выдать x^5. Как...

Как сделать так, чтобы в DGV отображалось вместо request - запрос, а вместо response - ответ
Добрый день, ув. читатели форума. Проблема такова: В одном столбце я вывожу данные: request или...

Например у меня есть два класса. В одном из них несколько строк.Как во втором классе создать условие что если
Например у меня есть два класса. В одном из них несколько строк.Как во втором классе создать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.