![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос [D5, Paradox]
SashSt © (2003-05-21 08:38:00)Помогите разобраться с SQL-запросом.
Несмотря на кажущуюся простоту, стою
в тупике:
………………
q.SQL.Text:=
‘SELECT * from “x.db”
WHERE (Id = :Id1) AND (Id = :Id2) AND (Id = :Id3)’;
q.ParamByName(‘Id1’).AsInteger:=x;
q.ParamByName(‘Id2’).AsInteger:=y;
q.ParamByName(‘Id3’).AsInteger:=z;
q.Open;
Записи не отбираются.
Если параметр лишь один (Id = :Id1) все в порядке,
Как только их 2 и больше – пусто.
Подскажите, кто может!
Спасибо!!!
Соловьев (2003-05-21 10:22:00) [1]
> SashSt (21.05.03 10:16)
интересно как же он работает? не ужели выдает то что ты хотел?
_designer_ (2003-05-21 10:22:00) [2]а если честно:
http://www.delphimaster.ru/cgi-bin/forum.pl?look=1&id=1053338435&n=1
прежде чем вопрос задавать почитай форум...
_designer_ (2003-05-21 10:18:00) [3]
select id1 from ttt where id2=1 and id1 in
(select id1 from ttt where id2=2 and id1
in (select id1 from ttt where id2=3));
Для таблицы ttt (id1 int, id2 int)
выбор таких id1 при которых id2 и 1 и 2 и 3
Если нужно одно - возьми только первую запись...
SashSt (2003-05-21 10:16:00) [4]Огромное спасибо, Hryamzik!!
Единственный нормальный рабочий совет!!!
P.S.
Спасибо и самым "умным". Без их
умозаключений не так скучно жить.
Это к Johnmen"у...
Sandman25 (2003-05-21 10:15:00) [5]http://www.delphimaster.ru/cgi-bin/forum.pl?look=1&id=1053338435&n=1
Там был задан аналогичный вопрос.
Hryamzik (2003-05-21 09:59:00) [6]SELECT DISTINCT x1.IDFirma FROM "x.db" x1
INNER JOIN "x.db" x2 ON x1.IDFirma=x2.IDFirma
INNER JOIN "x.db" x3 ON x1.IDFirma=x3.IDFirma
WHERE (x1.Id = :Id1) AND (x2.Id = :Id2) AND (x3.Id = :Id3)
или
SELECT IDFirma FROM
(SELECT IDFirma, Count(*) cnt FROM
(SELECT * FROM "x.db"
WHERE Id IN (:Id1,:Id2,:Id3)) x1
GROUP BY IDFirma) x1
WHERE cnt>=3
Если нужна ОДНА любая фирма то можно использовать SELECT TOP 1
Sergey13 (2003-05-21 09:54:00) [7]2SashSt (21.05.03 08:38)
Ты бы не изгалялся, а привел структуру таблицы и рабочий запрос, а то гадай тут где ты наврал, где ошибся а где "сократил"
WarLord (2003-05-21 09:39:00) [8]SELECT * from “x.db”
WHERE Id IN (:Id1,:Id2,:Id3)
Соловьев (2003-05-21 09:39:00) [9]
>из этой промежуточной таблицы мне нужно отобразить ОДНУ >id_фирму,которая производит лекарства по принципу (и то, и >другое, и тертье - вместе!!!).
Ты же написал
> Разные "Фирмы" могут производить одно и то же лекарство
Как тогда можно получить в результате 1 фирму?
Johnmen (2003-05-21 09:38:00) [10]Ну и тормоза...
Тебе же уже все разжевали, ты че ??? Danilka © (21.05.03 08:46)
Наталия (2003-05-21 09:34:00) [11]Тогда, наверное, есть смысл попробовать через EXISTS.
SashSt (2003-05-21 09:24:00) [12]Вся штука в том, что OR выберет все записи без разбора...
Если говорить подробнее - то дело обстоит так. Есть
поле("Фирма") и есть таблица лекарства с полем("Лекарство").
И есть промежуточная таблица (id_фирма, id_лекарство)
Разные "Фирмы" могут производить одно и то же лекарство.Так вот,из этой промежуточной таблицы мне нужно отобразить ОДНУ id_фирму,которая производит лекарства по принципу (и то, и другое, и тертье - вместе!!!). А OR выберет все(!!!) фирмы подряд, где найдет Id_лекарство втупую.
Описанный мною запрос лишь нужно расширить, само собой,
("WHERE IdFirma = :IdFirma AND ......... ), извините...
Спасибо!
Rol (2003-05-21 08:47:00) [13]Всё верно. Хочешь получить результат - используй голову и or.
Danilka (2003-05-21 08:46:00) [14]ты написал что-то типа: дайте мне запись у которой поле ID одновременно равно 5, 3 и 7.
Просто такой записи никогда быть не может :))
попробуй AND, заменить на OR.