 |
 |
Форум сетевых администраторов » Базы данных » MySQL » Выборка недастающих данных
| Автор |
| Тема |
 |
|
 |
|
|
|
Администратор


Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус:  |
имеется таблица вида
ид
набор
имя
содержит данные
code:
требуется выбрать данные набора 1, но также дополнить их данными из набора -1 если они не существуют в наборе 1. Вобщем нужно получить следующий результат:
code:
Башка не варит уже сегодня
__________________
Всегда есть решение.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
16-02-2003 23:08 |
|
|
Участник+
|
| Может просто добавишь еще один column и голову... |
[сооб. #34577]
17-02-2003 00:58 |
|
Участник+


Зарегистрирован: Sep 2001
Место проживания:
Публикаций: 173
Статус:  |
Может просто добавишь еще один column и голову не будешь ломать и в будущем оно может пригодится? Про запас, так сказать, добавь еще пару-тройку колонок на всякий случай... Ð_то наверное самый простой вариант, мне лично не приходит в голову какой-либо хитрый запрос который сможет справится с задачей...
Но, ИМХО, найдется толковый програмист который меня поправит... С башкой у меня такая же фигня сегодня 
__________________
Всё в наших руках.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
17-02-2003 00:58 |
|
|
Участник+
|
| Может немного не так - не проверял, но похоже... |
[сооб. #34647]
17-02-2003 09:34 |
|
Участник+


Зарегистрирован: Jun 2002
Место проживания: Украина
Публикаций: 617
Статус:  |
Может немного не так - не проверял, но похоже на
SELECT имя FROM Tablename
WHERE набор=1 AND
(набор = -1 AND (NOT SELECT имя FROM Tablename WHERE набор=1))
__________________
Тест - проверка верности!
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
17-02-2003 09:34 |
|
|
Администратор
|
| Gyrus не, нельзя добавить колонку по некоторым... |
[сооб. #34682]
17-02-2003 17:46 |
|
Администратор


Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус:  |
Gyrus не, нельзя добавить колонку по некоторым причинам, не буду их приводить.
Viktor не совсем понимаю этот запрос но в любом случае попробую. Тут надо использовать LEFT JOIN.
__________________
Всегда есть решение.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
17-02-2003 17:46 |
|
|
Администратор
|
пример таблицы
[code]
id| set | name
--|--------|-----
1... |
[сооб. #34700]
17-02-2003 23:25 |
|
Администратор


Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус:  |
пример таблицы
code:
Мне в голову пришел только один вариант, сделать выборку двумя запросами
1. Выбрать все -1 которым не соответсвует 1
PHP:
SELECT set1.id, set1.set, set1.name FROM tblname set1
LEFT JOIN tblname set2 ON ( set1.name = set2.name AND set2.id = 1 )
WHERE set1.id = -1 AND set2.id IS NULL
//получим
id| set | name
--|--------|-----
3 | -1 | имя3
4 | -1 | имя4
2. Выбрать все 1
PHP:
SELECT id, name, set FROM tblname WHERE id = 1
//получим
id| set | name
--|--------|-----
5 | 1 | имя1
6 | 1 | имя2
Потом программно их объеденить. Может у кого есть другие идеи на этот счет?
polo добавил 17-02-2003 в 23:44:50:
да уж, затраты на выполнения такого запроса баснословные, сами посудите [1.08149803 s] против простой выборке всех данных set=1 [0.04839003 s]
__________________
Всегда есть решение.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
17-02-2003 23:25 |
|
|
Участник+
|
| Да, здесь без дополнительных запросов или... |
[сооб. #34750]
18-02-2003 12:19 |
|
|


Участник+
|
| Если я правильно понимаю, то твоя замудренная... |
[сооб. #35468]
24-02-2003 16:54 |
|
Участник+


Зарегистрирован: May 2002
Место проживания: Владимирская обл.|Москва
Публикаций: 165
Статус:  |
Если я правильно понимаю, то твоя замудренная фраза "требуется выбрать данные набора 1, но также дополнить их данными из набора -1 если они не существуют в наборе 1" переводится на русский язык в контексте предоставленной таблицы, как "выбрать все уникальные имена". Ð_то делается не очень сложно:
code:
У меня в таблице поля id,flag и name. Только что проверил на MySQL 4.0.10-gamma - работает. На твоих данных получается:
code:
Сообщение было отредактировано Rumata 24-02-2003 в 17:01
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
24-02-2003 16:54 |
|
|
Администратор
|
| Rumata спсибо, пробовал разные варианты потом... |
[сооб. #35519]
24-02-2003 20:16 |
|
Администратор


Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус:  |
Rumata спсибо, пробовал разные варианты потом решил пойти другим путем, уж очень ресурсоемкая задачка получается.
__________________
Всегда есть решение.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
24-02-2003 20:16 |
|
|
STFW
|
| Есть такие ключевые слова как ALL,DISTINCT,DISTINCTROW... |
[сооб. #38041]
18-03-2003 02:36 |
|
STFW


Зарегистрирован: Jul 2002
Место проживания: Кольский п-ов
Публикаций: 305
Статус:  |
Есть такие ключевые слова как ALL,DISTINCT,DISTINCTROW которые определяют как бцдцт обрабатываться строки с дублирующимися значениями
синтаксис типа такого: SELECT [ALL|DISTINCT|DISTINCTROW] select_list FROM tablename ....
P.S.
а из какого набора выбирать первым можно предопределить с помошью ORDER BY, GROUP, HAVING ....
__________________
FAQ OFF
Сообщение было отредактировано SCHIZO 18-03-2003 в 02:39
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|
18-03-2003 02:36 |
|
|
|
Формат времени GMT. Текущее время 00:20.
|
Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения. |
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
|
|
|
|
| |
Page generated in 0.22263598 seconds (97.54% PHP - 2.46% MySQL) with 26 queries.
|
 |