Форум: "Базы";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
ВнизSQL-запрос Найти похожие ветки
← →
SashSt (2003-05-21 08:38) [0]Помогите разобраться с 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 и больше – пусто.
Подскажите, кто может!
Спасибо!!!
← →
Danilka (2003-05-21 08:46) [1]ты написал что-то типа: дайте мне запись у которой поле ID одновременно равно 5, 3 и 7.
Просто такой записи никогда быть не может :))
попробуй AND, заменить на OR.
← →
Rol (2003-05-21 08:47) [2]Всё верно. Хочешь получить результат - используй голову и or.
← →
SashSt (2003-05-21 09:24) [3]Вся штука в том, что OR выберет все записи без разбора...
Если говорить подробнее - то дело обстоит так. Есть
поле("Фирма") и есть таблица лекарства с полем("Лекарство").
И есть промежуточная таблица (id_фирма, id_лекарство)
Разные "Фирмы" могут производить одно и то же лекарство.Так вот,из этой промежуточной таблицы мне нужно отобразить ОДНУ id_фирму,которая производит лекарства по принципу (и то, и другое, и тертье - вместе!!!). А OR выберет все(!!!) фирмы подряд, где найдет Id_лекарство втупую.
Описанный мною запрос лишь нужно расширить, само собой,
("WHERE IdFirma = :IdFirma AND ......... ), извините...
Спасибо!
← →
Наталия (2003-05-21 09:34) [4]Тогда, наверное, есть смысл попробовать через EXISTS.
← →
Johnmen (2003-05-21 09:38) [5]Ну и тормоза...
Тебе же уже все разжевали, ты че ??? Danilka © (21.05.03 08:46)
← →
WarLord (2003-05-21 09:39) [6]SELECT * from “x.db”
WHERE Id IN (:Id1,:Id2,:Id3)
← →
Соловьев (2003-05-21 09:39) [7]
>из этой промежуточной таблицы мне нужно отобразить ОДНУ >id_фирму,которая производит лекарства по принципу (и то, и >другое, и тертье - вместе!!!).
Ты же написал
> Разные "Фирмы" могут производить одно и то же лекарство
Как тогда можно получить в результате 1 фирму?
← →
Sergey13 (2003-05-21 09:54) [8]2SashSt (21.05.03 08:38)
Ты бы не изгалялся, а привел структуру таблицы и рабочий запрос, а то гадай тут где ты наврал, где ошибся а где "сократил"
← →
Hryamzik (2003-05-21 09:59) [9]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
← →
Sandman25 (2003-05-21 10:15) [10]http://delphimaster.net/view/3-1053338435/
Там был задан аналогичный вопрос.
← →
SashSt (2003-05-21 10:16) [11]Огромное спасибо, Hryamzik!!
Единственный нормальный рабочий совет!!!
P.S.
Спасибо и самым "умным". Без их
умозаключений не так скучно жить.
Это к Johnmen"у...
← →
_designer_ (2003-05-21 10:18) [12]
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
Если нужно одно - возьми только первую запись...
← →
Соловьев (2003-05-21 10:22) [13]
> SashSt (21.05.03 10:16)
интересно как же он работает? не ужели выдает то что ты хотел?
← →
_designer_ (2003-05-21 10:22) [14]а если честно:
http://delphimaster.net/view/3-1053338435/
прежде чем вопрос задавать почитай форум...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c