Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 05:37 28.04.24 
Клубове/ Компютри и Интернет / Бази данни Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема Re: SQL заявка [re: aruseva]
Автор salle (един такъв)
Публикувано29.09.09 16:43  



Мисля, че схващам какво искаш, но ще трябва да обясниш по-подробно структурата на таблиците и по точно какво може и какво не може да има в тях като данни . В зависимост от това решението е различно.

За целта да вземем един прост пример. Използвам MySQL, но таблицата е напълно стандартна.

CREATE TABLE t (x INT, y INT, PRIMARY KEY(x,y));

INSERT INTO t VALUES(1, 1), (1,4), (2,1), (3,1),(3,4), (4,4), (5,2);

SELECT * FROM t;
+---+---+
| x | y |
+---+---+
| 1 | 1 |
| 1 | 4 |
| 2 | 1 |
| 3 | 1 |
| 3 | 4 |
| 4 | 4 |
| 5 | 2 |
+---+---+
7 rows in set (0.00 sec)


Ако правилно съм те разбрал задачката е да извадим тези x за които има редове с и y=1 и y=4 т.е. в този случай x = 1 и x = 3

Решението за общия случай по-добре е JOIN на таблицата към самата себе си толкова пъти колкото стойности на y ни трябват. В случая:

SELECT t1.x FROM t AS t1, t AS t2 WHERE t1.x = t2.x AND t1.y = 1 AND t2.y = 4;
+---+
| x |
+---+
| 1 |
| 3 |
+---+

За да разбереш откъде идва резултатът ето оттук:

mysql> SELECT * FROM t AS t1, t AS t2 WHERE t1.x = t2.x;
+---+---+---+---+
| x | y | x | y |
+---+---+---+---+
| 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 4 |
| 1 | 4 | 1 | 1 |
| 1 | 4 | 1 | 4 |
| 2 | 1 | 2 | 1 |
| 3 | 1 | 3 | 1 |
| 3 | 1 | 3 | 4 |
| 3 | 4 | 3 | 1 |
| 3 | 4 | 3 | 4 |
| 4 | 4 | 4 | 4 |
| 5 | 2 | 5 | 2 |
+---+---+---+---+
11 rows in set (0.00 sec)

mysql> SELECT * FROM t AS t1, t AS t2 WHERE t1.x = t2.x AND t1.y = 1;
+---+---+---+---+
| x | y | x | y |
+---+---+---+---+
| 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 4 |
| 2 | 1 | 2 | 1 |
| 3 | 1 | 3 | 1 |
| 3 | 1 | 3 | 4 |
+---+---+---+---+
5 rows in set (0.00 sec)

SELECT * FROM t AS t1, t AS t2 WHERE t1.x = t2.x AND t1.y = 1 AND t2.y = 4;
+---+---+---+---+
| x | y | x | y |
+---+---+---+---+
| 1 | 1 | 1 | 4 |
| 3 | 1 | 3 | 4 |
+---+---+---+---+
2 rows in set (0.00 sec)


Можеш ли оттук нататък да приложиш логиката върху твоята заявка?

Редактирано от salle на 29.09.09 16:45.



Цялата тема
ТемаАвторПубликувано
* SQL заявка aruseva   28.09.09 20:25
. * Re: SQL заявка salle   28.09.09 22:15
. * Re: SQL заявка aruseva   28.09.09 23:09
. * Re: SQL заявка salle   29.09.09 00:54
. * Re: SQL заявка aruseva   29.09.09 08:09
. * Re: SQL заявка salle   29.09.09 16:43
. * Re: SQL заявка salle   29.09.09 16:50
. * Re: SQL заявка aruseva   29.09.09 23:12
. * Re: SQL заявка salle   29.09.09 23:35
. * Re: SQL заявка aruseva   29.09.09 23:51
. * Re: SQL заявка wqw   01.10.09 18:06
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.