Re[4]: Элементарная выборка
От: yogi Россия  
Дата: 03.07.03 12:15
Оценка: 14 (2)
Здравствуйте, Анатолий Широков, Вы писали:

SB>>>>2. его примерный вид в SQL

АШ>>>С JOIN:
АШ>>>
АШ>>>SELECT tools.toolid, tools.toolname, equipment.roomid
АШ>>>FROM tools LEFT OUTER JOIN equipment ON tools.equipmentid = equipment.equipmentid
АШ>>>WHERE roomid = %roomid
АШ>>>


АШ>Не надо спешить. Мой запрос выводит список всего оборудования (tools) c пометкой имеется ли данное оборудование в номере %roomid или нет. Только вместо ваших единичек ставиться идентификатор комнаты.


Мда? А вот если например в номере нет какого-то айтема с номером 7, то после лефтджоина вы получите строку вида (7,'Название мега-айтема',NULL), а потом эта строка будет отфильтрована условием roomid = %roomid — ведь номер комнаты NULL.
Путь к сердцу женщины лежать не должен.
Re: Элементарная выборка
От: БуМарат Россия  
Дата: 03.07.03 21:24
Оценка: 3 (1) -1
Здравствуйте, SBoyko, Вы писали:

SB>Привет Всем!

skip..

SB>Необходимо сформировать запрос с результатом вида (для номера 103)

SB>1 Кондиционер 103
SB>2 Компьютер
SB>3 Телевизор
SB>4 Магнитофон 103
SB>5 Вентилятор

SB>Вопросы:

SB>1. можно ли сформировать такой запрос.
можно в любой СУБД
SB>2. его примерный вид в SQL
SELECT Tools.ToolID, Tools.ToolName, Equipment.RoomID
FROM Tools, Equipment
WHERE Tools.ToolID = Equipment.ToolID
AND Equipment.RoomID=103
UNION
SELECT T1.ToolID, T1.ToolName,('сюда NULL или что угодно') AS RoomID
FROM Tools AS T1
WHERE T1.ToolID NOT IN (SELECT T2.ToolID
                       FROM Tools AS T2, Equipment
                       WHERE T2.ToolID = Equipment.ToolID
                       AND Equipment.RoomID=103 ) 
ORDER BY Tools.ToolID;

SB>3. Вообще делает ли кто нибудь так???? )))
не знаю..
... << RSDN@Home 1.0 beta 6a >>
Цель жизни — стремление к цели
Re[4]: Элементарная выборка
От: yogi Россия  
Дата: 03.07.03 13:02
Оценка: 3 (1)
Здравствуйте, SBoyko, Вы писали:

SB>Мужики, ну я не знаю что и делать, аксес не хавает это, я уже пробовал и так


Ну не хавает и фиг с ним. Он же Аксесс Сделаешь два запроса:
SELECT * FROM Tools; --нарисуешь табличку
SELECT * FROM Equipment WHERE RoomID=103; --расставишь галочки
Путь к сердцу женщины лежать не должен.
Re: Элементарная выборка
От: ААз  
Дата: 04.07.03 08:56
Оценка: 2 (1)
Здравствуйте, SBoyko, Вы писали:


SB>Необходимо сформировать запрос с результатом вида (для номера 103)


SB>1 Кондиционер 103

SB>2 Компьютер
SB>3 Телевизор
SB>4 Магнитофон 103
SB>5 Вентилятор

SB>Вопросы:

SB>1. можно ли сформировать такой запрос.
SB>2. его примерный вид в SQL
SB>3. Вообще делает ли кто нибудь так???? )))

Попробуй перекрестный запрос:

TRANSFORM Count(ID) AS C_ID
SELECT tools.ToolID, ToolName
FROM [SELECT Equipment.*, tools.*
FROM Equipment INNER JOIN tools ON Equipment.ToolID = tools.ToolID]. AS [temp]
GROUP BY tools.ToolID, ToolName
PIVOT RoomID;


и по всем номерам и количество оборудования (вдруг в одном номере два телевизора
Re[4]: Элементарная выборка
От: yogi Россия  
Дата: 03.07.03 12:19
Оценка: 1 (1)
Здравствуйте, SBoyko, Вы писали:

SB>Да, чистая правда. Необходимо заполнять Enable в CheckBox'ax если тулза есть в комнате Можно конечно читать всю таблицу Тулз, рисовать CheckBox'сы, а затем сформировать запрос на выборку тулз по комнате, но... захотелось все сразу одним махом


Тебе неплохо бы запустить что-то вида (по вкусу поправишь)
select a.toolname "Наименование", 
   (select count(*)
   from equipment
   where roomid=103 and toolid=a.toolid) "Количество"
from tools a

Тока вот не знаю проглотит ли аксес такое
Путь к сердцу женщины лежать не должен.
Re[3]: Элементарная выборка
От: Анатолий Широков СССР  
Дата: 03.07.03 12:08
Оценка: +1
Здравствуйте, yogi, Вы писали:

Y>Здравствуйте, Анатолий Широков, Вы писали:


SB>>>2. его примерный вид в SQL

АШ>>С JOIN:
АШ>>
АШ>>SELECT tools.toolid, tools.toolname, equipment.roomid
АШ>>FROM tools LEFT OUTER JOIN equipment ON tools.equipmentid = equipment.equipmentid
АШ>>WHERE roomid = %roomid
АШ>>


Y>Не надо спешить. Как автор вопроса ни пытался скрыть от всех нас что ему надо, я догадался что хочен он следующее: надо вывести все записи из таблицы tools, и если данная тулза имеется в номере 103, то ставить флажок(единичку например), а если нет то NULL. Ваш же запрос делает более очевидную вещь — выводит список оборудования в номере.


Не надо спешить. Мой запрос выводит список всего оборудования (tools) c пометкой имеется ли данное оборудование в номере %roomid или нет. Только вместо ваших единичек ставиться идентификатор комнаты.
Re[4]: Элементарная выборка
От: Анатолий Широков СССР  
Дата: 03.07.03 13:04
Оценка: +1
Здравствуйте, SBoyko, Вы писали:

SB>Здравствуйте, Toughpheeckouse, Вы писали:


T>>исправленная весрия:

T>>
T>>SELECT t.ID, t.Name, e.RoomID FROM 
T>>Tools t LEFT OUTER JOIN Equipment e ON t.ID = e.ToolID AND e.RoomID = 103
T>>


SB>Мужики, ну я не знаю что и делать, аксес не хавает это, я уже пробовал и так


А знаешь, давай попробуем вот что сделать:

Выберем оборудование находящееся в данной комнате:

SELECT tools.toolid, equipment.roomid
WHERE tools INNER JOIN equipment ON tools.toolid = equipment.toolid AND equipment.RoomID = 103

Получивший запрос (назовем его query1) подпихнем в исходный:

SELECT tools.toolid, queryid.roomid
WHERE tools LEFT JOIN query1 ON tools.toolid = query1.toolid
Re[5]: Элементарная выборка
От: SBoyko  
Дата: 03.07.03 13:21
Оценка: -1
Здравствуйте, yogi, Вы писали:

Y>Здравствуйте, SBoyko, Вы писали:


SB>>Мужики, ну я не знаю что и делать, аксес не хавает это, я уже пробовал и так


Y>Ну не хавает и фиг с ним. Он же Аксесс Сделаешь два запроса:

Y>
Y>SELECT * FROM Tools; --нарисуешь табличку
Y>SELECT * FROM Equipment WHERE RoomID=103; --расставишь галочки
Y>


ВСЕ ! ЗА...МУЧИЛСЯ, весь день убил на это, а придется делать по рабоче-крестьянски.

P.S НИКОГДА НЕ ПОЛьЗУЕТЕСЬ ACCESS'ом
Элементарная выборка
От: SBoyko  
Дата: 03.07.03 11:37
Оценка:
Привет Всем!
с вот такой задачкой. Есть номера(гостиничные), в них находятся некоторое оборудование.
Вся эта беда находится в 2х таблицах:Tools (ToolID, ToolName, Price) и Equipment (RoomID и ToolID)

Tools
ToolID ToolName ToolPrice
1 Кондиционер 36,00р.
2 Компьютер 100,00р.
3 Телевизор 20,00р.
4 Магнитофон 15,00р.
5 Вентилятор 10,00р.

Equipment
ID RoomID ToolID
1 103 2
2
204 1
3 103 4

4 305 1
5
305 2
6 305 3

7 306 5

Необходимо сформировать запрос с результатом вида (для номера 103)

1 Кондиционер 103
2 Компьютер
3 Телевизор
4 Магнитофон 103
5 Вентилятор

Вопросы:
1. можно ли сформировать такой запрос.
2. его примерный вид в SQL
3. Вообще делает ли кто нибудь так???? )))
Re: Элементарная выборка
От: Анатолий Широков СССР  
Дата: 03.07.03 11:47
Оценка:
SB>2. его примерный вид в SQL

С JOIN:


SELECT tools.toolid, tools.toolname, equipment.roomid
FROM tools LEFT OUTER JOIN equipment ON tools.equipmentid = equipment.equipmentid
WHERE roomid = %roomid


C *=:

SELECT tools.toolid, tools.toolname, equipment.roomid
FROM tools, equipment 
WHERE tools.equipmentid *= equipment.equipmentid 
  AND roomid = %roomid


SB>3. Вообще делает ли кто нибудь так???? )))


делают
Re: Элементарная выборка
От: Toughpheeckouse Россия  
Дата: 03.07.03 11:50
Оценка:
Здравствуйте, SBoyko, Вы писали:

SB>Необходимо сформировать запрос с результатом вида (для номера 103)


SB>1 Кондиционер 103

SB>2 Компьютер
SB>3 Телевизор
SB>4 Магнитофон 103
SB>5 Вентилятор

SB>Вопросы:

SB>1. можно ли сформировать такой запрос.
SB>2. его примерный вид в SQL
SB>3. Вообще делает ли кто нибудь так???? )))


SELECT t.ID, t.Name, e.RoomID, IFNULL(e.RoomID, -1) FROM 
Tools t LEFT OUTER JOIN Equipment e ON t.ID = e.ToolID
WHERE e.RoomID = 103


в тех комнатах, где нет какой-то тулы будет -1. или можно сделать NULL или пустую строку все зависит от того какой тип тебе нужен.
Думайте сами, решайте сами...
Re[2]: Элементарная выборка
От: SBoyko  
Дата: 03.07.03 11:55
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:


АШ>
АШ>SELECT tools.toolid, tools.toolname, equipment.roomid
АШ>FROM tools LEFT OUTER JOIN equipment ON tools.equipmentid = equipment.equipmentid
АШ>WHERE roomid = %roomid
АШ>


у меня поля equipmentid нету
Заменил на toolid — не работает
Re[3]: Элементарная выборка
От: Анатолий Широков СССР  
Дата: 03.07.03 11:57
Оценка:
SB>у меня поля equipmentid нету

Да, конечно, ON tools.toolid = equipment.toolid.

SB>Заменил на toolid — не работает


Не работает под чем?
Re[4]: Элементарная выборка
От: SBoyko  
Дата: 03.07.03 11:58
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

SB>>у меня поля equipmentid нету


АШ>Да, конечно, ON tools.toolid = equipment.toolid.


SB>>Заменил на toolid — не работает


АШ>Не работает под чем?


Access 2002, не выдает поля с NULL значениями комнат
Re[2]: Элементарная выборка
От: yogi Россия  
Дата: 03.07.03 12:03
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

SB>>2. его примерный вид в SQL

АШ>С JOIN:
АШ>
АШ>SELECT tools.toolid, tools.toolname, equipment.roomid
АШ>FROM tools LEFT OUTER JOIN equipment ON tools.equipmentid = equipment.equipmentid
АШ>WHERE roomid = %roomid
АШ>


Не надо спешить. Как автор вопроса ни пытался скрыть от всех нас что ему надо, я догадался что хочен он следующее: надо вывести все записи из таблицы tools, и если данная тулза имеется в номере 103, то ставить флажок(единичку например), а если нет то NULL. Ваш же запрос делает более очевидную вещь — выводит список оборудования в номере.
Путь к сердцу женщины лежать не должен.
Re[3]: Элементарная выборка
От: SBoyko  
Дата: 03.07.03 12:06
Оценка:
Здравствуйте, yogi, Вы писали:

Y>Не надо спешить. Как автор вопроса ни пытался скрыть от всех нас что ему надо, я догадался что хочен он следующее: надо вывести все записи из таблицы tools, и если данная тулза имеется в номере 103, то ставить флажок(единичку например), а если нет то NULL. Ваш же запрос делает более очевидную вещь — выводит список оборудования в номере.


Да, чистая правда. Необходимо заполнять Enable в CheckBox'ax если тулза есть в комнате Можно конечно читать всю таблицу Тулз, рисовать CheckBox'сы, а затем сформировать запрос на выборку тулз по комнате, но... захотелось все сразу одним махом
Re[4]: Элементарная выборка
От: SBoyko  
Дата: 03.07.03 12:12
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:


АШ>Не надо спешить. Мой запрос выводит список всего оборудования (tools) c пометкой имеется ли данное оборудование в номере %roomid или нет. Только вместо ваших единичек ставиться идентификатор комнаты.


Именно это мне и нужно, но результата нет. Может дело в Access'e?
Re[2]: Элементарная выборка
От: Toughpheeckouse Россия  
Дата: 03.07.03 12:48
Оценка:
Здравствуйте, Toughpheeckouse, Вы писали:


Хм... а yogi то прав.

исправленная весрия:
SELECT t.ID, t.Name, e.RoomID FROM 
Tools t LEFT OUTER JOIN Equipment e ON t.ID = e.ToolID AND e.RoomID = 103
Думайте сами, решайте сами...
Re[3]: Элементарная выборка
От: SBoyko  
Дата: 03.07.03 12:58
Оценка:
Здравствуйте, Toughpheeckouse, Вы писали:

T>исправленная весрия:

T>
T>SELECT t.ID, t.Name, e.RoomID FROM 
T>Tools t LEFT OUTER JOIN Equipment e ON t.ID = e.ToolID AND e.RoomID = 103
T>


Мужики, ну я не знаю что и делать, аксес не хавает это, я уже пробовал и так
Re[5]: Элементарная выборка
От: Анатолий Широков СССР  
Дата: 03.07.03 13:07
Оценка:
Выберем оборудование находящееся в данной комнате:

SELECT tools.toolid, equipment.roomid
FROM tools INNER JOIN equipment ON tools.toolid = equipment.toolid
WHERE equipment.RoomID = 103
Re[6]: Элементарная выборка
От: SBoyko  
Дата: 03.07.03 13:15
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:


АШ>Выберем оборудование находящееся в данной комнате:


АШ>SELECT tools.toolid, equipment.roomid

АШ>FROM tools INNER JOIN equipment ON tools.toolid = equipment.toolid
АШ>WHERE equipment.RoomID = 103


Вот это точно не работает
Re[2]: Элементарная выборка
От: SBoyko  
Дата: 04.07.03 04:44
Оценка:
Здравствуйте, БуМарат, Вы писали:

БМ>SELECT Tools.ToolID, Tools.ToolName, Equipment.RoomID

БМ>FROM Tools, Equipment
БМ>WHERE Tools.ToolID = Equipment.ToolID
БМ>AND Equipment.RoomID=103
БМ>UNION
БМ>SELECT T1.ToolID, T1.ToolName,('сюда NULL или что угодно') AS RoomID
БМ>FROM Tools AS T1
БМ>WHERE T1.ToolID NOT IN (SELECT T2.ToolID
БМ> FROM Tools AS T2, Equipment
БМ> WHERE T2.ToolID = Equipment.ToolID
БМ> AND Equipment.RoomID=103 )
БМ>ORDER BY Tools.ToolID;

Спасибо огромное, это то, что надо !
Re[2]: Элементарная выборка
От: yogi Россия  
Дата: 04.07.03 08:00
Оценка:
Здравствуйте, Toughpheeckouse, Вы писали:

T>
T>SELECT t.ID, t.Name, e.RoomID, IFNULL(e.RoomID, -1) FROM 
T>Tools t LEFT OUTER JOIN Equipment e ON t.ID = e.ToolID
T>WHERE e.RoomID = 103
T>


Блин, чего то я вчера протупил Достаточно ведь поправить
WHERE e.RoomID IS NULL OR RoomID = 103

Ведь лефтджоин аксесс умеет делать?
Путь к сердцу женщины лежать не должен.
Re[2]: Элементарная выборка
От: БуМарат Россия  
Дата: 04.07.03 09:39
Оценка:
Здравствуйте, ААз, Вы писали:

ААз>Попробуй перекрестный запрос:


ААз>TRANSFORM Count(ID) AS C_ID

ААз>SELECT tools.ToolID, ToolName
ААз>FROM [SELECT Equipment.*, tools.*
ААз>FROM Equipment INNER JOIN tools ON Equipment.ToolID = tools.ToolID]. AS [temp]
ААз>GROUP BY tools.ToolID, ToolName
ААз>PIVOT RoomID;

А не трудно ли будет потом работать в программе с наименованиями столбцов из записей таблицы? (Конечно, наверное, можно запрос модифицировать нужным образом)

ААз>

ААз>и по всем номерам и количество оборудования (вдруг в одном номере два телевизора

IMHO нельзя так организовывать данные, чтобы количество телевизоров определять таким образом. Должно быть соответствующее поле : Equipment (ID,RoomID,ToolID,количество)
... << RSDN@Home 1.0 beta 6a >>
Цель жизни — стремление к цели
Re[3]: Элементарная выборка
От: ААз  
Дата: 04.07.03 10:57
Оценка:
Здравствуйте, БуМарат, Вы писали:

БМ>А не трудно ли будет потом работать в программе с наименованиями столбцов из записей таблицы? (Конечно, наверное, можно запрос модифицировать нужным образом)


нет не трудно. можно ограничить внутренний запрос Where RoomID=103 и получишь только для 103 номера. и работай только с полем "103"



БМ>IMHO нельзя так организовывать данные, чтобы количество телевизоров определять таким образом. Должно быть соответствующее поле : Equipment (ID,RoomID,ToolID,количество)



по сути таблица Equipment — опись оборудования с указанием места расположения и вида оборудования, таблица Tools- вид оборудования. Каждая запись таблицы Equipment может содержать данные присущие только этому объекту: дата ввода, откуда пришло, кто принял и пр. и потому их складывать нельзя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.