Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MSQL Server 2000 и обработка нескольких таблиц

8.3K
12 июля 2005 года
ddmdm
15 / / 25.05.2005
Добрый день, всем!

ASP и MSQL Server 2000

Пытаюсь сделать SELECT сразу по двум таблицам с разными названиями,
но совершенно с одинаковыми наименованиями полей. Значения ID в таблицах всегда разные.

set RS=Conn.execute("SELECT ID, S1,S2 From Tab1, Tab2 " &_
"WHERE ( " &_
"(S1 = 'U') ")

Выдается сообщение
Ambiguous column name 'ID'.

Мне надо сделать выборку из обеих таблиц тех строчек, у которых значения поля S1=U.
Подскажите, пожалуйста.

Таблица 1
TabName=Tab1
ID | S1 | S2
------------------------------------
211 | M | 32
214 |U | 62
215 | M | 91
216 | U | 84
217 | M | 78
218 | U | 36

Таблица 2
TabName=Tab2
ID | S1 | S2
--------------------------------------------------
220 | M | 52
221 | M | 51
222 | U | 54
223 | U | 55
224 | M | 56
225 | U | 59
12K
14 июля 2005 года
Erast
7 / / 14.07.2005
насколько я понял, ты хочешь получить нечто вроде
ID | S1 | S2
------------------------------------
214 |U | 62
216 | U | 84
218 | U | 36
222 | U | 54
223 | U | 55
225 | U | 59

В этом случае нужно использовать UNION:
SELECT id, s1, s2 FROM Tab1 WHERE s1 = 'U'
UNION
SELECT id, s1, s2 FROM Tab2 WHERE s1 = 'U'
12K
14 июля 2005 года
Erast
7 / / 14.07.2005
А вообще на будущее, если у таблиц одинаковые имена колонок, необходимо явно указывать, какой таблицы колонку хочешь взять. Взять хотя бы твой случай.
SELECT tab1.id, tab1.s1, tab1.s2, tab2.id, tab2.s1, tab2.s2 FROM tab1, tab2

Результат будт иметь вид:
tab1.id|tab1.s1|tab1.s2|tab2.id|tab2.s1|tab2.s2

Чтобы не париться и не писать каждый раз имена таблиц, можно использовать псевдоним:
SELECT a.id, a.s1, a.s2, b.id, b.s1, b.s2 FROM tab1 a, tab2 b
8.3K
14 июля 2005 года
ddmdm
15 / / 25.05.2005
Добрый день всем,

Erast, cпасибо за помощь. Сработало.

Прошу пардон за настойчивость, однако далее мне надо, применяя UNION, одновременно отсортировывать результат по общему ID (по его возрастанию/убыванию значения), т.е. фактически это - сортировка по ID результирующей выборки (см ниже таблицу). ID у таблиц никогда не совпадают, поэтому и значения общего ID тоже разные. Попытки применить "ORDER by ID DESC (или ASC)" или ORDER by (tab1.ID)AND(tab2.ID) DESC, или ORDER by (tab1 AND tab2).ID DESC и т.д. выдает ошибку типа: Error near ORDER. Возможно я напутал, что-то с синтаксисом. Есть ли выход из ситуации?

Спасибо заранее,

Удачи.

<<
Erast wrote:
В этом случае нужно использовать UNION:
SELECT id, s1, s2 FROM Tab1 WHERE s1 = 'U'
UNION
SELECT id, s1, s2 FROM Tab2 WHERE s1 = 'U'
>>

<<
Erast wrote:
насколько я понял, ты хочешь получить нечто вроде
ID | S1 | S2
------------------------------------
214 |U | 62
216 | U | 84
218 | U | 36
222 | U | 54
223 | U | 55
225 | U | 59
>>
Необходима сортировка этих данных.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог