2014-01-28 5 views
1

У меня огромная проблема, я не делаю то, что происходит. Это мойmysql не равно не работает

table1

+-----+-----------------------+--------------+ 
| id | invoice_number | invoice_date | 
+-----+-----------------------+--------------+ 
| 12 | 12536801244 | 2009-09-23 | 
| 38 | 12585302890 | 2009-11-18 | 
| 37 | 12584309829 | 2009-11-16 | 
| 123 | 12627605146 | 2010-01-06 | 
| 191 | 12663105176 | 2010-02-16 | 
+-----+-----------------------+--------------+ 

и это мой второй

table2

+-----+-----------------------+--------------+ 
| id | invoice_number | invoice_date | 
+-----+-----------------------+--------------+ 
| 12 | 1t657801244 | 2009-09-23 | 
| 20 | 12585302890 | 2009-11-18 | 
| 37 | 1ss58430982 | 2009-11-16 | 
| 103 | 12627605146 | 2010-01-06 | 
| 121 | 12346310517 | 2010-02-16 | 
+-----+-----------------------+--------------+ 

То, что я хочу, у меня есть получить все invoice_numbers, которые не в table2

Это мой SQL-запрос.

select t2.invoice_number FROM table1 t1 
JOIN table2 t2 ON t2.invoice_number != t1.inovice_number; 

Но у меня получается другой результат. Любое тело, что не так с кодом SQL?

ответ

1

Производительность мудрый вы можете использовать Left Регистрация или не существует

Попробуйте с LEFT JOIN

Select t2.invoice_number 
FROM table1 t1 
LEFT JOIN table2 t2 ON 
      t2.invoice_number = t1.inovice_number AND 
      t2.invoice_number IS NULL; 

Попробуйте с N ВЗ Exist

Select t2.invoice_number 
FROM table1 t1 Where Not Exist 
    (
    SELECT NULL 
    FROM table2 t2 
    WHERE t2.invoice_number = t1.inovice_number 
) 

Попробовать Не В

Select t2.invoice_number 
FROM table1 t1 
Where t1.inovice_number NOT IN 
(
SELECT t2.inovice_number 
FROM table2 t2 
) 
1

Почему вы не просто попробовать:

Select * from Table1 
Where Table1.invoice_number NOT IN (select invoice_number from Table2) 
+0

не эффективен в MySQL. вместо этого используйте 'LEFT JOIN' или' NOT EXISTS() '. –

+0

@JohnWoo согласен, ваш ответ с 'left join' был бы лучше для перспективы производительности – hashbrown

0

Почему бы не использовать where not exists?

SELECT * 
FROM table1 t1 
WHERE NOT EXISTS (SELECT * FROM table2 t2 WHERE t1.invoice_number = t2.invoice_number) 
1

Вы можете использовать LEFT JOIN.

SELECT t1.invoice_number 
FROM table1 t1 
     LEFT JOIN table2 t2 ON t2.invoice_number = t1.inovice_number 
WHERE t2.invoice_number IS NULL 
0

Это неправильный способ запросить то, что вы ищете.

Вы, наверное, нужно что-то вроде этого:

select invoice_number from table2 
where invoice_number not in (select invoice_number from table1) 
0
select * from table1 where invoice_number NOT EXISTS (select invoice_number FROM table2 WHERE table1.invoice_number = table2.invoice_number); 
0
select t2.id FROM table1 as t1 
INNER JOIN table2 as t2 ON t2.id != t1.id; 
Смежные вопросы