MySQL query ...

9 отговора 563 прегледа
#1

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?

Отговор
в отговор на nasko #2

Re: какво всъщност искаш да получиш?

Ако искаш само реда (2, 1) тогава
... WHERE A NOT IN (1, 2)

salle.online.bg/sig
Отговор
в отговор на nasko #3

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

Редактирано от ro6avia на

Отговор
в отговор на salle #4

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...")

Отговор
в отговор на nasko #5

Re: какво всъщност искаш да получиш?

SELECT b FROM tbl WHERE b NOT IN (SELECT b FROM tbl WHERE a<>1)

Естествено ако си поне с 4.1 ...

Отговор
в отговор на nasko #6

Ти пък си искал без вложена заявка ...

Уфф, като не чета внимателно ...

Отговор
в отговор на Cтyдeнт #7

Re: какво всъщност искаш да получиш?

На по-стара версия съм

Отговор
в отговор на nasko #8

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
Отговор
в отговор на salle #9

Re: какво всъщност искаш да получиш?

Да, в случая ще докара нужните резултати, но ако добавим запис (2 7) например, работата ще се обърка :(

Отговор
в отговор на nasko #10

Re: какво всъщност искаш да получиш?

Хора, давайте някакви идеи

Отговор