Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выбор данных из одной таблицы, которые не присутствуют в другой
 
 автор: Disable   (01.08.2007 в 12:37)   письмо автору
 
 

таблица 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. выбор одним запросом

   
 
 автор: Trianon   (01.08.2007 в 13:13)   письмо автору
 
   для: 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

   
 
 автор: Disable   (01.08.2007 в 13:33)   письмо автору
 
   для: Trianon   (01.08.2007 в 13:13)
 

Спасибо огромное.
Осталось только разобраться как это срабатывает :)

   
 
 автор: oradev   (01.08.2007 в 16:10)   письмо автору
 
   для: 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;

   
 
 автор: Trianon   (01.08.2007 в 16:14)   письмо автору
 
   для: oradev   (01.08.2007 в 16:10)
 

И использует коррелированный запрос.
Издеваемся, да?

   
 
 автор: oradev   (01.08.2007 в 16:26)   письмо автору
 
   для: 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

Только делать так не нужно!

   
 
 автор: oradev   (01.08.2007 в 20:42)   письмо автору
 
   для: 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 <> &num;


Однако в этой ситуации необходимо смотреть уже на план выполнения.

   
 
 автор: Faraon   (01.08.2007 в 13:15)   письмо автору
 
   для: Disable   (01.08.2007 в 12:37)
 

-

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования