MySQL query ...
9 отговора
563 прегледа
MySQL query ...
Дайте идея как да направя следната заявка на MySQL (без ползването на вложени SELECT-и, MINUS). Освен това предпочитам да не ползвам временни таблици.
Имаме една таблица
А B
--- ---
1 1
1 3
1 5
1 6
2 3
3 1
Искаме да направим:
SELECT b FROM table_name WHERE A = 1
MINUS
SELECT b FROM table_name WHERE A = 2
Как ще стане това без MINUS / EXCEPT?
Имаме една таблица
А B
--- ---
1 1
1 3
1 5
1 6
2 3
3 1
Искаме да направим:
SELECT b FROM table_name WHERE A = 1
MINUS
SELECT b FROM table_name WHERE A = 2
Как ще стане това без MINUS / EXCEPT?
Re: какво всъщност искаш да получиш?
Ако искаш само реда (2, 1) тогава
... WHERE A NOT IN (1, 2)
salle.online.bg/sig
... WHERE A NOT IN (1, 2)
salle.online.bg/sig
Re: MySQL query ...
Ако ти трябва математическата функция изваждане
select (x1.b-x2.b) as res from tbl x1, tbl x2 where x1.a=1 and x2.a=4
П.С. Забравих да ти кажа, че ако имаш по няколко реда за стойноста в поле а резултатите са много интересни, друг е въпроса, ако ти трябва сумата от изваждането или разликата от сумите от условието...
за забравилите математика първото и второто би трябвало да дадат еднакъв резултат
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
select (x1.b-x2.b) as res from tbl x1, tbl x2 where x1.a=1 and x2.a=4
П.С. Забравих да ти кажа, че ако имаш по няколко реда за стойноста в поле а резултатите са много интересни, друг е въпроса, ако ти трябва сумата от изваждането или разликата от сумите от условието...
за забравилите математика първото и второто би трябвало да дадат еднакъв резултат
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Редактирано от ro6avia на
Re: какво всъщност искаш да получиш?
От дадения пример:
А B
--- ---
1 1
1 3
1 5
1 6
2 3
3 1
Искам да получа записите
1 1
1 5
1 6
Искам
1 3
да не участва в резултата, понеже имаме запис
2 3
(Трябват ми всъщност само полетата от втората колона, но в случая това няма значение - въпрос на "SELECT b FROM..." или "SELECT * FROM...")
А B
--- ---
1 1
1 3
1 5
1 6
2 3
3 1
Искам да получа записите
1 1
1 5
1 6
Искам
1 3
да не участва в резултата, понеже имаме запис
2 3
(Трябват ми всъщност само полетата от втората колона, но в случая това няма значение - въпрос на "SELECT b FROM..." или "SELECT * FROM...")
Re: какво всъщност искаш да получиш?
SELECT b FROM tbl WHERE b NOT IN (SELECT b FROM tbl WHERE a<>1)
Естествено ако си поне с 4.1 ...
Естествено ако си поне с 4.1 ...
Re: какво всъщност искаш да получиш?
mysql> select * from t;
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 3 |
| 1 | 5 |
| 1 | 6 |
| 2 | 3 |
| 3 | 1 |
+------+------+
6 rows in set (0.00 sec)
mysql> select t1.* from t as t1, t as t2 where t1.a = 1 and t2.a = 2 and t1.b != t2.b;
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 5 |
| 1 | 6 |
+------+------+
3 rows in set (0.00 sec)
salle.online.bg/sig
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 3 |
| 1 | 5 |
| 1 | 6 |
| 2 | 3 |
| 3 | 1 |
+------+------+
6 rows in set (0.00 sec)
mysql> select t1.* from t as t1, t as t2 where t1.a = 1 and t2.a = 2 and t1.b != t2.b;
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 5 |
| 1 | 6 |
+------+------+
3 rows in set (0.00 sec)
salle.online.bg/sig
Re: какво всъщност искаш да получиш?
Да, в случая ще докара нужните резултати, но ако добавим запис (2 7) например, работата ще се обърка :(