Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помочь составить SQL запрос / 17 сообщений из 17, страница 1 из 1
19.07.2011, 11:51
    #37357324
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
есть таблица
pole_1pole_2112212314331
надо получить
pole_1pole_21112
т.е. у кого одинаковое pole_1, но разное pole_2
...
Рейтинг: 0 / 0
19.07.2011, 12:15
    #37357405
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
q1w1e1,

Фокса под рукой нет, отработает ли такая конструкция?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select * 
from t
where pole_1 in
    (select t1.pole_1
     from t t1
     group by t1.pole_1
     having (count distinct t1.pole_2) >  1 
    );
...
Рейтинг: 0 / 0
19.07.2011, 12:15
    #37357407
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
q1w1e1,

SELECT DISTINCT pole_1, pole_2 FROM <table> WHERE pole_1 = 1 INTO CURSOR c1
...
Рейтинг: 0 / 0
19.07.2011, 12:27
    #37357442
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
AmKad,

нет, где-то ошибка, пытаюсь разобраться
...
Рейтинг: 0 / 0
19.07.2011, 12:31
    #37357453
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
IgorNG,

хотелось бы без условия WHERE pole_1 = 1, т.к. это пример, и мне надо найти значения этого pole_1
Спасибо
...
Рейтинг: 0 / 0
19.07.2011, 12:35
    #37357462
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
AmKad,

спасибо, заработало...
...
Рейтинг: 0 / 0
19.07.2011, 12:47
    #37357496
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
"Переводим" запрос буквально

Найти такие записи в таблице, для которых существует хотя бы еще одна запись в этой же таблицы с тем же самым значением поля pole_1, но другим значением поля pole_2

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
* Исходные данные для примера
Create Cursor myTab (pole_1 i, pole_2 i)
Insert into MyTab values ( 1 ,  1 )
Insert into MyTab values ( 2 ,  2 )
Insert into MyTab values ( 1 ,  2 )
Insert into MyTab values ( 3 ,  1 )
Insert into MyTab values ( 4 ,  3 )
Insert into MyTab values ( 3 ,  1 )

* Собственно запрос
select * ;
from MyTab tab1 ;
where exists(select  1  from MyTab tab2 ;
                 where tab2.pole_1 = tab1.pole_1 ;
                    and tab2.pole_2 <> tab1.pole_2)
...
Рейтинг: 0 / 0
19.07.2011, 13:01
    #37357549
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
ВладимирМ,

Спасибо, но что-то это выше моего понимания..:-), мне не понятно... выражение в начале должно выполняться в скобках, но в скобках уже присутствует переменная "заскобочного" выражения (tab1.pole_1), вот это и сложно для понимания...
...
Рейтинг: 0 / 0
19.07.2011, 13:04
    #37357561
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
т.е. выполнить по шагам (т.е. то что в скобках выполнить, понять..потом подгрузить следущий шаг и т.д.) не получится...
...
Рейтинг: 0 / 0
19.07.2011, 13:06
    #37357569
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
q1w1e1,

Если условие WHERE убрать, то будет результат:
pole_1 pole_2
1 1
1 2
2 2
3 1
4 3

т.е. неповторяющиеся значения
...
Рейтинг: 0 / 0
19.07.2011, 13:12
    #37357590
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
Можно еще так сделать:
Код: plaintext
1.
2.
3.
select distinct A.*;
	from MyTab A join MyTab B on A.pole_1 = B.pole_1;
	where A.pole_2 != B.pole_2
...
Рейтинг: 0 / 0
19.07.2011, 15:04
    #37357884
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
q1w1e1ВладимирМ,

Спасибо, но что-то это выше моего понимания..:-), мне не понятно... выражение в начале должно выполняться в скобках, но в скобках уже присутствует переменная "заскобочного" выражения (tab1.pole_1), вот это и сложно для понимания...
Да чего там сложного-то

Директива WHERE выполняется для каждой записи таблицы-источника. В данном случае для копии таблицы MyTab, которую обозначили как tab1. Другими словами, для каждой записи tab1 выполняется подзапрос, который указан после exists(). Если этот запрос нашел хотя бы одну запись, то текущая запись tab1 должна попасть в выборку. Если не нашел, то - не должна

Ну, для простоты понимания, можно представить, что есть 2 совершенно одинаковые таблицы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  tab1                            tab2
 ---------------------         ---------------------
 | pole_1  | pole_2  |         | pole_1  | pole_2  | 
 ---------------------         ---------------------
 |    1    |    1    |         |    1    |    1    | 
 |    2    |    2    |         |    2    |    2    | 
 |    1    |    2    |         |    1    |    2    | 
 |    3    |    1    |         |    3    |    1    | 
 |    4    |    3    |         |    4    |    3    | 
 |    3    |    1    |         |    3    |    1    | 

- Берем первую запись первой таблицы и просматриваем ВСЕ записи второй таблицы на предмет выполнения условия в exist(). Если нашли, то запись из первой таблицы должна попасть в выборку.
- Берем вторую запись первой таблицы и просматриваем ВСЕ записи второй таблицы на предмет выполнения условия в exist(). Если нашли, то запись из первой таблицы должна попасть в выборку.
- ... Повторяем проверку для каждой записи из первой таблицы, сравнивая ее со ВСЕМИ записями второй таблицы
...
Рейтинг: 0 / 0
19.07.2011, 15:52
    #37358000
Megabrain
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
Что-то я не понял, а order by в FoxPro уже отменили?
...
Рейтинг: 0 / 0
19.07.2011, 16:13
    #37358057
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
MegabrainЧто-то я не понял, а order by в FoxPro уже отменили?
Это ты к чему спросил? Выше про сортировки никто не спрашивал
...
Рейтинг: 0 / 0
19.07.2011, 16:37
    #37358081
Megabrain
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
Dima TMegabrainЧто-то я не понял, а order by в FoxPro уже отменили?
Это ты к чему спросил? Выше про сортировки никто не спрашивал

Не ну как вориант если файл нибальшой отсартировать и на глаз пасмотреть.
...
Рейтинг: 0 / 0
20.07.2011, 06:44
    #37358634
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
Большое всем спасибо за помощь и разъяснения в составлении запроса...:-)
...
Рейтинг: 0 / 0
20.07.2011, 06:47
    #37358635
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помочь составить SQL запрос
ВладимирМ,

Спасибо, теперь всё понятно..:-)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помочь составить SQL запрос / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]