Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Заблокирован

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

29.08.2012, 14:07. Показов 1145. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.08.2012, 14:07
Ответы с готовыми решениями:

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

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

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

6
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
29.08.2012, 14:22
IFNULL
0
Заблокирован
29.08.2012, 15:54  [ТС]
Подскажите, как его применить к алиасам?
Следующим образом не идет:
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
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
29.08.2012, 16:06
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  [ТС]
1. Вибирает записи только с ненулевым юзером.
2. Нужно выбрать все записи что имеются в Results и ограничиться только другими условиями запроса. Если указано в Results user1Id > 0 выдать его Name(ФИО) с таблицы Users, в противном случае хоть чем-то забить ячейку.
3. Нужно выбирать несколько юзеров для одной результирующей записи по их ID, которых нет в предыдущих данных в БД.

Создавать несуществующего юзера в таблице Users нецелесообразно, т.к. администраторы программы непременно воспользуются функцией удаления его и то что сейчас есть в базе станет недоступным.
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
29.08.2012, 18:51
Лучший ответ Сообщение было отмечено как решение

Решение

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  [ТС]
Вроде получилось для двух юзеров, спасибо.
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2012, 09:35
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru