|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
SQL заявка
|
|
Автор |
aruseva (непознат
) |
Публикувано | 28.09.09 20:25 |
|
Здравейте!!!
проблемът ми е следният:
Имам следните две таблици:
http://inlinethumb21.webshots.com/468/2468648650061623857S500x500Q85.jpg
След изпълнение на тази заявка
SELECT Door_Type.ID_Doors, Door_Type.Name AS Type_Door, Door_Chela.ID_Door_Chela,Door_Chela.Name AS Name_Chela,
Korpus_Door_Type.ID_Korpus
FROM Korpus_Door_Type INNER JOIN
Door_Type ON Korpus_Door_Type.ID_Door_Type = Door_Type.ID_Doors INNER JOIN
Door_Chela ONKorpus_Door_Type.ID_Door_Chela = Door_Chela.ID_Door_Chela
WHERE (dbo.Korpus_Door_Type.ID_Korpus = 4)
Резултата е този:
http://inlinethumb18.webshots.com/31377/2750197630061623857S600x600Q85.jpg
Кажете ми как трябва да ми изглежда заявката за да се показват само редовете маркирани в синьо. Т,е да се показват само тези резултати за ID_Doors , които имат ст-ти за ID_Door_Chela 1 4.
| |
Тема
|
Re: SQL заявка
[re: aruseva]
|
|
Автор |
salle (един такъв) |
Публикувано | 28.09.09 22:15 |
|
"да се показват само тези резултати за ID_Doors , които имат ст-ти за ID_Door_Chela 1 4."
се превежда като
... AND Door_Chela.ID_Door_Chela =1
или
... AND Door_Chela.ID_Door_Chela =1
или
... AND Door_Chela.ID_Door_Chela IN(1,4)
във WHERE в зависимост от това какво точно искаш
| |
Тема
|
Re: SQL заявка
[re: salle]
|
|
Автор |
aruseva (непознат
) |
Публикувано | 28.09.09 23:09 |
|
Да не съм се изразира правило . Искам да се показват само тези резултатите които за едно и също ID_Doors имат едновременно ст-ти на ID_Door_Chela 1 и 4.
от резултата на второто изображение искам да изведа само сините полета. Тези със стойност на ID_Doors = 2 и 13, защото само те имат ID_Doors_Chelo едновремено записи със ID_Doors = 1 и 4.
Door_Chela.ID_Door_Chela IN(1,4) извежда всички записи за ID_Doors както съм ги показала, а аз искам да сортирам само някой от тях....
Оххх нещо и аз не мога да го обесня май както трябва, дано някой да успее да ме разбере
| |
Тема
|
Re: SQL заявка
[re: aruseva]
|
|
Автор |
salle (един такъв) |
Публикувано | 29.09.09 00:54 |
|
"Искам да се показват само тези резултатите които за едно и също ID_Doors имат едновременно ст-ти на ID_Door_Chela 1 и 4"
Как ще стане това ID_Door_Chela да е 1 и 4 едновременно?
Ако под едновременно разбираш в един и същи ред това очевидно е невъзможно. Ако разбираш нещо друго ... обясни.
Редактирано от salle на 29.09.09 00:58.
| |
Тема
|
Re: SQL заявка
[re: salle]
|
|
Автор |
aruseva (непознат
) |
Публикувано | 29.09.09 08:09 |
|
да не може едновременно ID_Door_Chela да има ст-ст 1 и 4
просто искам да се сортират само тези редове за ID_Doors който имат ст-ст за ID_Door_Chelo както 1 така и 4 . Примерно ред 3 не отговаря на условието защото няма запис при който ID_Door_Chela = 4 и ID_Doors = 1
| |
Тема
|
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.
| |
Тема
|
Re: SQL заявка
[re: salle]
|
|
Автор |
salle (един такъв) |
Публикувано | 29.09.09 16:50 |
|
И за да демонстрирам защо структурата и съдържанието са от значение ето едно хакерско решение за примера който използвам:
SELECT x FROM t WHERE y IN (1,4) GROUP BY x HAVING COUNT(*) = 2;
+---+
| x |
+---+
| 1 |
| 3 |
+---+
2 rows in set (0.00 sec)
В случая използвам, че PRIMARY KEY(x, y) следователно y IN (1,4) ще върне максимум 2 реда за всяко x.
| |
Тема
|
Re: SQL заявка
[re: salle]
|
|
Автор |
aruseva (непознат
) |
Публикувано | 29.09.09 23:12 |
|
Salle, благодаря ти многоооо
Това което си ми предложил със Join към таблицата Korpus_Door_Type много ми помогна и всичко се получи така както го исках.
Отностно структурата на таблиците.
Таблицата Korpus_Door_Type съдържа 4 полета
1)ID_Korpus_Door_Type от тип integer - което е primary key
2) ID_Korpus от тип integer
3)ID_Door_Type от тип integer
4)ID_Door_Chela от тип integer
Отново мн ти благодаря , че имаше търпение и ме разбра какво точно искам да постигна.
| |
Тема
|
Re: SQL заявка
[re: aruseva]
|
|
Автор |
salle (един такъв) |
Публикувано | 29.09.09 23:35 |
|
Е аз бавно загрявам затова ми трябва много търпение.
И недей да се занимаваш с бази данни в 23:12. Нищо добро не излиза от това.
| |
Тема
|
Re: SQL заявка
[re: salle]
|
|
Автор |
aruseva (непознат
) |
Публикувано | 29.09.09 23:51 |
|
е понякога се получават нещата ;)
както тази вечер
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|