Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как выбрать строки совпадающие по двум столбцам, чистый SQL 
:(
    Опции темы
Vaulter
Дата 1.4.2004, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



есть таблица, скажем из 5 столбцов
необходимо выбрать строки у которых совпадают ТОЛЬКО два столбца из пяти...
не между собой, а в строках таблицы...




--------------------
PM MAIL WWW ICQ   Вверх
GoodBoy
Дата 1.4.2004, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 1
Всего: 83



пишу по памяти, возможно с ошибкой (если конечно правильно понял вопрос)... :-))))
Код
SELECT DISTINCT t1.* FROM table t1, table t2 WHERE t1.field1=t2.field1 AND t1.field2=t2.field2



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Vaulter
Дата 1.4.2004, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



GoodBoy
неа! я уже пробовал так...не выходит, выдает совсем не то что ожидается.


--------------------
PM MAIL WWW ICQ   Вверх
Secandr
Дата 1.4.2004, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 2
Всего: 39



Vaulter
Код
SELECT * FROM t1 LEFT JOIN t2 ON t1.n1=t2.n2



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Vaulter
Дата 1.4.2004, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



Secandr
пробовал:
SELECT t1.* FROM table t1
LEFT JOIN table t2 ON t1.n1=t2.n1 AND t1.n2=t2.n2

тоже не помогает ) выводит строки которые имеют разные n1 и n2 почему =///


--------------------
PM MAIL WWW ICQ   Вверх
GoodBoy
Дата 1.4.2004, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 1
Всего: 83



SELECT DISTINCT t1.* FROM table t1, table t2 WHERE t1.field1=t2.field1 AND t1.field2=t2.field2

пробовал? :-))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Vaulter
Дата 1.4.2004, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



GoodBoy
да, еще утром sad.gif

незнаю, может не четко понятна задача, есть таблица допустим:

а б * * *
а в * * *
б в * * *
а б * * *
а б * * *
б а * * *
б в * * *
б в * * *

* - не существенны, так вот задача запроса возвратить вот такие строки:

а б * * *
а в * * *
б в * * *
а б * * *
а б * * *
б а * * *
б в * * *
б в * * *
Добавлено @ 16:18
а решение, хоть и примерное, пришло вот такое:
Код
SELECT *,count(a) as c FROM table GROUP BY a,b HAVING c>1



--------------------
PM MAIL WWW ICQ   Вверх
GoodBoy
Дата 1.4.2004, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 1
Всего: 83



если бы у тебя в таблице было еще одно УНИКАЛЬНОЕ поле (скажем ID - число), то тогда вот так:
Код
SELECT DISTINCT t1.* FROM tetete t1, tetete t2 WHERE t1.fl1=t2.fl1 AND t1.fl2=t2.fl2 AND t1.id<>t2.id

У меня работает!!!
Код
desc tetete;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| fl1   | char(1) | YES  |     | NULL    |       |
| fl2   | char(1) | YES  |     | NULL    |       |
| fl3   | char(1) | YES  |     | NULL    |       |
| fl4   | char(1) | YES  |     | NULL    |       |
| fl5   | char(1) | YES  |     | NULL    |       |
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
6 rows in set (0.00 sec)


SELECT * FROM tetete ORDER by id;
+------+------+------+------+------+------+
| fl1  | fl2  | fl3  | fl4  | fl5  | id   |
+------+------+------+------+------+------+
| a    | b    | c    | d    | e    |    1 |
| a    | b    | w    | y    | b    |    2 |
| a    | b    | w    | w    | v    |    3 |
| a    | v    | c    | d    | e    |    4 |
| b    | v    | w    | y    | b    |    5 |
| b    | v    | .    | 8    | v    |    6 |
| b    | v    | 1    | p    | 3    |    7 |
| b    | a    | w    | w    | v    |    8 |
+------+------+------+------+------+------+
8 rows in set (0.00 sec)


SELECT DISTINCT t1.* FROM tetete t1, tetete t2 WHERE t1.fl1=t2.fl1 AND t1.fl2=t2.fl2 AND t1.id<>t2.id ORDER BY id;
+------+------+------+------+------+------+
| fl1  | fl2  | fl3  | fl4  | fl5  | id   |
+------+------+------+------+------+------+
| a    | b    | c    | d    | e    |    1 |
| a    | b    | w    | y    | b    |    2 |
| a    | b    | w    | w    | v    |    3 |
| b    | v    | w    | y    | b    |    5 |
| b    | v    | .    | 8    | v    |    6 |
| b    | v    | 1    | p    | 3    |    7 |
+------+------+------+------+------+------+
6 rows in set (0.00 sec)

Как видишь 4 и 8 элемент - отсутствуют! :-))))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Secandr
Дата 1.4.2004, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 2
Всего: 39



SELECT count(n3) 'tmp', n1,n2,n3 FROM table HAVING tmp>1 GROUP BY n1,n2


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Vaulter
Дата 1.4.2004, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



Secandr
Код
SELECT count(n3) 'tmp', n1,n2,n3 FROM table HAVING tmp>1 GROUP BY n1,n2

не, как раз
Код
SELECT count(n3) 'tmp', n1,n2,n3 FROM table GROUP BY n1,n2 HAVING tmp>1
это я выше написал уж...
а!
Цитата
одно УНИКАЛЬНОЕ поле
ЕГО нет!! в том то и загвоздка!!! )) а менять таблицу - 9000 записей уж... да и скрипты на нее завязаны... эхь )
но плюс в карму! )


--------------------
PM MAIL WWW ICQ   Вверх
Secandr
Дата 1.4.2004, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 2
Всего: 39



Код
SELECT * FROM `table1` `t1`,`table1` `t2`  WHERE t1.n1=t2.n2 GROUP by t1.n1,t1.n2,t1.n3,t1.n4

Таблица:
Код
CREATE DATABASE test_chat;

USE test_chat;

CREATE TABLE `table1` (
 `n1` tinyint(4) default NULL,
 `n2` tinyint(4) default NULL,
 `n3` tinyint(4) default NULL,
 `n4` tinyint(4) default NULL
) TYPE=MyISAM;

INSERT INTO `table1` (`n1`, `n2`, `n3`, `n4`) VALUES
 ('1','2','3','1'),
 ('2','1','2','2'),
 ('3','2','1','3'),
 ('4','5','2','2'),
 ('1','2','8','1');

COMMIT;

Добавлено @ 18:04
Извращение, но работает
Добавлено @ 18:06
Вот что выдаёт
Код
n1 n2 n3 n4 n1_1 n2_1 n3_1 n4_1
1 2 3 1 2 1 2 2
1 2 8 1 2 1 2 2
2 1 2 2 1 2 3 1



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Vaulter
Дата 1.4.2004, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



Secandr
хм....кажется то что нужно ) еще плюс в карму...а то она у тебя совсем...


--------------------
PM MAIL WWW ICQ   Вверх
Secandr
Дата 1.4.2004, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 2
Всего: 39



только тут два ещё помента:
1. в GROUP BY нужно указать все элементы
2. набор из всехэлементов должен быть уникальным


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.