2013-05-28 4 views
0

Позвольте мне описать свои потребности ....выбрать все от t1, если t1.uniqueNumber! = T2.uniqueNumber

У меня есть 2 таблицы MySQL базы данных. Позвольте мне назвать имя таблицы в качестве запаса и запаса. Во-первых, я вставил 15 строк в инвентарь с уникальным номером для каждой записи как serialno.

mysql> select stockin_id, serialno, description from stockin limit 0,15; 
+------------+------------+------------------------------------------+ 
| stockin_id | serialno | description        | 
+------------+------------+------------------------------------------+ 
|   1 | KDR0000001 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   2 | KDR0000002 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   3 | KDR0000003 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   4 | KDR0000004 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   5 | KDR0000005 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   6 | KDR0000006 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   7 | KDR0000007 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   8 | KDR0000008 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   9 | KDR0000009 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   10 | KDR0000010 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   11 | T22ALT5786 | PRINTED BRD ASSMBLY      | 
|   12 | TU82956450 | FUNCTIONAL UNIT/GSM DXU-21    | 
|   13 | X510239240 | FUNCTIONAL UNIT/GSM DXU-21    | 
|   14 | TD36843873 | PRINTED BOARD ASSEMB/RP4-F    | 
|   15 | TD36843908 | PRINTED BOARD ASSEMB/RP4-F    | 
+------------+------------+------------------------------------------+ 
15 rows in set (0.00 sec) 

Теперь я перевел несколько продуктов на склад в продуктах с такой же SerialNo, которые хранятся на склад, из таблицы следующего образом-

mysql> select stockout_id, serialno, description from stockout limit 0,15; 
+------------+------------+------------------------------------------+ 
| stockin_id | serialno | description        | 
+------------+------------+------------------------------------------+ 
|   1 | KDR0000001 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   2 | KDR0000002 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   3 | KDR0000003 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
|   4 | KDR0000004 | DATA CARRIER/FLASH CARD WITH RBS 2000 SW | 
+------------+------------+------------------------------------------+ 
4 rows in set (0.00 sec) 

Теперь я хотел бы, чтобы выбрать точный ВНУТРЕННЯЯ РУКА записей со склада. Как я могу достичь?

ответ

0

Есть несколько способов, вы можете сделать это

SELECT * 
FROM stockin si 
WHERE NOT EXISTS (
         SELECT 1 
         FROM stockout so 
         WHERE si.serialno = so.serialno 
        ) 

ИЛИ

SELECT * 
FROM stockin si 
WHERE si.serialno NOT IN (
           SELECT so.serialno 
           FROM stockout so 
          ) 

Если вы знаете, что записи в таблице stockin и stockout являются уникальными

SELECT * 
FROM stockin si LEFT JOIN 
     stockout so ON si.serialno = so.serialno 
WHERE so.serialno IS NULL 

I предложит yopu использовать тот, который имеет для вас наибольшее значение, когда вы u прочитал его и только потом начал беспокоиться о производительности.

+0

Оба работают ... Какой запрос будет быстрее? –

+0

Обычно я использую номер 1 или номер 3. Номер 3, если вы используете данные из второй таблицы, номер 1, если нет. –

+0

Время запроса HeidiSQL следующим образом: # 1-/* 0 затронутых строк, найдено 3 994 строки. Длительность для 1 запроса: 0,000 сек. (+ 0.094 с. Сеть) */ # 2-/* 0 затронутых строк, найдено 3 994 строки. Длительность для 1 запроса: 0,000 сек. (+ 0.094 с. Сеть) */ # 3-/* 0 затронутых строк, найдено 3 994 строки. Длительность для 1 запроса: 0,000 сек. (+ 0.156 с. Сеть) */ Итак, я собираюсь с # 1 и, наконец, спасибо вам. –

Смежные вопросы