Страница 1 из 1

Multiple rows in singleton select

Добавлено: 24 янв 2007, 12:43
john_chek
Есть 3 таблицы в Firebird 2.0: Kart, Sotrud и Kros_Isp. Kros_Isp – кросстаблица в которой 2 внешних ключа: ID_Sotrud и ID_Kart. Необходимо из Kart выбрать все записи при условии что Кros_Isp.Id_Sotrud =: Sotrud.Id.
Пишу запрос:

Код: Выделить всё

select * from kart where id = (select kros_isp.id_kart from kros_isp where kros_isp.id_sotrud =: Sotrud.id)
Если единичная выборка, т.е. запросу соответствует только 1 запись, то выбирает, а если больше записей, то пишет: multiple rows in singleton select.
Distinct – не помогает!
Подскажите пожалуйста, что не так, не могу понять!?

Добавлено: 24 янв 2007, 13:05
Dimitry Sibiryakov
Тебе нужен либо in, либо join+distinct. Второе может быть быстрее.

Добавлено: 24 янв 2007, 14:00
john_chek
Dimitry Sibiryakov писал(а):Тебе нужен либо in, либо join+distinct. Второе может быть быстрее.
Не понял, join для склеивания таблиц, а мне склеивать нечего!? Я пытаюсь выбрать все в "лоб" из Kart. А если In, то куда?
По подробнее можно?
Кстати если всего 2 записи соответствует запросу, то тоже выдаёт ту же самую ошибку!

Добавлено: 24 янв 2007, 14:47
john_chek
Написал вот так:

Код: Выделить всё

select * from kart where id in (select kros_isp.id_kart from kros_isp where (kros_isp.id_sotrud) in (:Sotrud.id))
Все прекрасно выбирает!!!
Спасибо!

Добавлено: 24 янв 2007, 14:52
kdv
Все прекрасно выбирает!!!
читай www.ibase.ru/devinfo/joins.htm