|
|
|
| таблица 1
|id|
|1 |
|2 |
|3 |
|4 |
|5 |
таблица 2
| id_1 | id_2 |
| 2 | 4 |
| 2 | 5 |
| 3 | 5 |
| 2 | 1 |
нужно выбрать для опеределенного номера такие id из первой таблицы, чтобы:
-в результат не попал тот номер, по которому выбирается
-в результат не попали те id_2, которые есть во второй таблице для заданного номера id_1
например, для id=2 результат
|3|
а для id=1 результат
|2|
|3|
|4|
|5|
ps. выбор одним запросом | |
|
|
|
|
|
|
|
для: Disable
(01.08.2007 в 12:37)
| |
SELECT DISTINCT tbl1.id
FROM tbl1
LEFT JOIN tbl2 ON tbl1.id = tbl2.id_2 AND tbl2.id_1 = $num
WHERE tbl1.id != $num AND tbl2.id_1 IS NULL
|
| |
|
|
|
|
|
|
|
для: Trianon
(01.08.2007 в 13:13)
| | Спасибо огромное.
Осталось только разобраться как это срабатывает :) | |
|
|
|
|
|
|
|
для: Disable
(01.08.2007 в 13:33)
| | Так наверняка нагляднее:
/* Formatted on 2007/07/31 19:03 (Formatter Plus v4.8.7) */
SELECT table1.ID
FROM table1
WHERE NOT EXISTS (SELECT 1
FROM table2
WHERE table1.ID = table2.id_2 AND table2.id_1 = $num)
AND table1.ID <> $num;
|
| |
|
|
|
|
|
|
|
для: oradev
(01.08.2007 в 16:10)
| | И использует коррелированный запрос.
Издеваемся, да? | |
|
|
|
|
|
|
|
для: Trianon
(01.08.2007 в 16:14)
| | to Trianon: да да!
А это как вам :
SELECT tab.ID
FROM (SELECT table1.ID
FROM table1
MINUS
SELECT table2.id_2
FROM table2
WHERE table2.id_1 = &num) tab
WHERE tab.ID <> &num
|
Только делать так не нужно! | |
|
|
|
|
|
|
|
для: Trianon
(01.08.2007 в 16:14)
| | Афтор можно еще и так:
SELECT table1.ID
FROM table1
WHERE table1.ID NOT IN (SELECT table2.id_2
FROM table2 where table2.ID_1 = &num)
and table1.ID <> #
|
Однако в этой ситуации необходимо смотреть уже на план выполнения. | |
|
|
|
|
|
|
|
для: Disable
(01.08.2007 в 12:37)
| | - | |
|
|
|