IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Пару вопросов по sql-statements (https://www.imho.ws/showthread.php?t=70748)

aramis 11.10.2004 14:25

Пару вопросов по sql-statements
 
вопрос нумеро уно: в базе имеется 2 таблицы( 1-название кабинета+id, 2-школьный предмет+в трёх разных колонках 3 id закреплённых за ним кабинета).
мне нужен список названий всех кабинетов, которые хотя бы раз встречаются в таблице 2

вопрос 2: есть к примеру такой statement

select Name as Name2
from Students
where Name="Sergey"

что надо сделать, чтобы в where можно было писать
where Name2="Sergey"
( в eтом случае у меня выдаётся ошибка "по крайней мере для одного параметра не указано значение")

заранее спасибо

П.С. visual studio .net 2003, c#, access

Alexandr 172 11.10.2004 14:37

А зачем так писать, ведь Name2 это алиас Name???

aramis 11.10.2004 14:41

Цитата:

Сообщение от Alexandr 172
А зачем так писать, ведь Наме2 это алиас Наме???

просто у меня в качестве Name довольно длинное выражение, которое в where уже потом не вставишь

newapr 12.10.2004 10:59

Если Name это expression то заюзай having.
Например select count(*) from table having count(*)>0

aramis 12.10.2004 12:59

вот ежели кому интересно, дело идёт об етой байде. я понимаю без схемы базы не фига не поймёшь, но оно работает ;) единственное ето то что у меня так и не получилось по-человечески прилепить одну и туже таблицу 3 раза и в where не прокатывает Raum1="a100" OR Raum2="100" or Raum3="100"

stunden_sqlstr=@"SELECT s.Bezeichnung, t.Teil,t.Teilung, u.Nr,u.TagNr as Tag,u.G_U, d.Abkuerzung as Dozent,d.Nachname as Dozent2, f.Abkuerzung, r1.Bezeichnung as Raum1,
(SELECT Bezeichnung FROM Raum WHERE RID=RaumID2) AS Raum2,
(SELECT Bezeichnung FROM Raum WHERE RID=RaumID3) AS Raum3
FROM Semestergruppe s inner join
(Teilgruppe t inner join
(Raum r1 inner join
(Unterrichtseinheit u inner join
(Dozent d inner join
(Kurs k inner join Fach f on k.Fach=f.Nr)
on d.id=k.Dozent)
on u.KursID=k.Nr)
on r1.RID=u.RaumID1)
on t.TGID=u.TGID)
on s.ID=t.SGID where "
+where_stat+" Order by s.Bezeichnung";

newapr 12.10.2004 16:15

а что мешает написать SELECT Bezeichnung FROM Raum WHERE RID=RaumID2 and (Bezeichnung = "a001" or Bezeichnung = "a002")
???

aramis 12.10.2004 16:30

Цитата:

Сообщение от newapr
а что мешает написать SELECT Bezeichnung FROM Raum WHERE RID=RaumID2 and (Bezeichnung = "a001" or Bezeichnung = "a002")
???

то что за одним предметом может до 3 кабинетов зарезервировано быть...
+ (в моём случае) есть в куче таблиц

newapr 12.10.2004 16:34

попробуй еще переписать sql. вместо inner join используй =. так читается намного легче. а потом возми Raum в FROM statement. после этого сможешь использовать поля этой таблицы в where-statement.

В каком уни учишься то?

aramis 12.10.2004 16:51

Цитата:

Сообщение от newapr
попробуй еще переписать sql. вместо inner join используй =. так читается намного легче. а потом возми Raum в FROM statement. после этого сможешь использовать поля этой таблицы в where-statement.

В каком уни учишься то?

а на всё кроме inner join visual studio матерится по страшному. и Raum в FrROM тоже есть(ето всё один запрос...). вообше бы блин проблем не было, если бы 1 предмет=1 кабинет, а не 3..

в етом запросе без схемы и бутылки не разберёшся
P.S. fh nürnberg

newapr 13.10.2004 10:41

У тебя не VC ругается наверное а DB. Какую DB используешь? Может можно решить не представляя одно и то же поле одной таблицы как два отдельных поля результирующей выборки?

aramis 13.10.2004 14:17

Цитата:

Сообщение от newapr
У тебя не VC ругается наверное а DB. Какую DB используешь? Может можно решить не представляя одно и то же поле одной таблицы как два отдельных поля результирующей выборки?

в принципе проблему я решил тем, что с базы беру всё что есть, а потом уже фильтрами выбираю всё, что мне нужно, но некрасиво ето блин. мне бы теперь 1.вопрос решить елегантно и всё было бы классно.

P.S.access


Часовой пояс GMT +4, время: 22:29.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.