Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-26409
Dimaz-z
2003-05-21 22:25
2003.06.09
Ещё одна проблема с упаковкой таблицы!!! Помогите пожалуйста!


3-26376
Wasilla
2003-05-21 09:41
2003.06.09
ADO & Paradox


1-26594
OMen
2003-05-28 16:06
2003.06.09
Запуск других приложений.


1-26547
ProfiUgl
2003-05-28 08:56
2003.06.09
Интеграция с MathCad


14-26660
zzet
2003-05-23 00:09
2003.06.09
Мастера на ТВ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский