Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.09;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
6-26641
NikEm
2003-04-03 16:30
2003.06.09
CGI приложение и Apache - не работает!


1-26529
Ткаченко Сергей
2003-05-27 10:44
2003.06.09
Проверка доступа к файлу


7-26816
denick
2003-04-04 19:01
2003.06.09
Люди как просканировать всё железо на компе?


6-26642
Сергей
2003-04-07 00:25
2003.06.09
создание своего WinPopup а


1-26607
AFrolov
2003-05-28 12:47
2003.06.09
Как получить ссылку на интерфейс