![]() |
Показаны 9 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- MySQL (http://netadmin.ws/forum/forumdisplay.php?forumid=40)
-- Выборка недастающих данных (http://netadmin.ws/forum/showthread.php?threadid=4386)
Выборка недастающих данных
имеется таблица вида
ид
набор
имя
содержит данные
ид| набор | имя
1 | -1 | имя1
2 | -1 | имя2
3 | -1 | имя3
4 | -1 | имя4
5 | 1 | имя1
6 | 1 | имя2
3| -1 | имя3
4| -1 | имя4
5| 1 | имя1
6| 1 | имя2

__________________
Всегда есть решение.
Может просто добавишь еще один column и голову не будешь ломать и в будущем оно может пригодится? Про запас, так сказать, добавь еще пару-тройку колонок на всякий случай... Ð_то наверное самый простой вариант, мне лично не приходит в голову какой-либо хитрый запрос который сможет справится с задачей...
Но, ИМХО, найдется толковый програмист который меня поправит... С башкой у меня такая же фигня сегодня 
__________________
Всё в наших руках.
Может немного не так - не проверял, но похоже на
SELECT имя FROM Tablename
WHERE набор=1 AND
(набор = -1 AND (NOT SELECT имя FROM Tablename WHERE набор=1))
__________________
Тест - проверка верности!
Gyrus не, нельзя добавить колонку по некоторым причинам, не буду их приводить.
Viktor не совсем понимаю этот запрос но в любом случае попробую. Тут надо использовать LEFT JOIN.
__________________
Всегда есть решение.
пример таблицы
id| set | name
--|--------|-----
1 | -1 | имя1
2 | -1 | имя2
3 | -1 | имя3
4 | -1 | имя4
5 | 1 | имя1
6 | 1 | имя2
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
SELECT id, name, set FROM tblname WHERE id = 1
//получим
id| set | name
--|--------|-----
5 | 1 | имя1
6 | 1 | имя2
__________________
Всегда есть решение.
Да, здесь без дополнительных запросов или временных таблиц (смотря какая БД) не обойтись.
Если я правильно понимаю, то твоя замудренная фраза "требуется выбрать данные набора 1, но также дополнить их данными из набора -1 если они не существуют в наборе 1" переводится на русский язык в контексте предоставленной таблицы, как "выбрать все уникальные имена". Ð_то делается не очень сложно:
SELECT t1.*,t2.flag AS fl FROM
test AS t1 LEFT JOIN test AS t2 ON (t1.flag<>t2.flag AND t1.name=t2.name)
HAVING ISNULL(fl) OR (flag=1)
id |flag|name| fl
3 | -1 |n3 | NULL
4 | -1 |n4 | NULL
5 | 1 |n1 |-1
6 | 1 |n2 |-1
Rumata спсибо, пробовал разные варианты потом решил пойти другим путем, уж очень ресурсоемкая задачка получается.
__________________
Всегда есть решение.
Есть такие ключевые слова как ALL,DISTINCT,DISTINCTROW которые определяют как бцдцт обрабатываться строки с дублирующимися значениями
синтаксис типа такого: SELECT [ALL|DISTINCT|DISTINCTROW] select_list FROM tablename ....
P.S.
а из какого набора выбирать первым можно предопределить с помошью ORDER BY, GROUP, HAVING ....
__________________
FAQ OFF
| Формат времени GMT. Текущее время 22:54. | Показаны 9 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.