2016-02-19 3 views
-6
  1. У меня есть две таблицы table1 и table2
  2. В table1 имя_поля является cert_no и в table2 имя_поля является cer1, cert2, cert3, cert4, cert5
  3. значение которого не было в table2 (cer1, cert2, cert3, cert4, cert5) в одиночку хочет отобразить
  4. Если и таблица имеет такое же значение только transfile_file хочет отобразить
 
    SELECT * 
    FROM table1 
    WHERE folio = '123456' 
     AND cm_flag !='X' 
     AND certificate_no NOT IN 
      (SELECT CONCAT(certno1,certno2,certno3,certno4,certno5,certno6,certno7,certno8,certno9,certno10) 
      FROM table2 
      WHERE tofolio = '123456' 
     ) 
+3

Если еще не поздно, я бы рекомендовал изменить дизайн стола. – ThinkTank

ответ

-1

Try:

SELECT * FROM table1 WHERE folio = '123456' AND cm_flag !='X' AND certificate_no NOT IN (SELECT CONCAT(certno1,',',certno2,',',certno3,',',certno4,',',certno5,',',certno6,',',certno7,',',certno8,',',certno9,',',certno10) FROM table2 WHERE tofolio = '123456') 
+0

Я пробовал только эту первую проверку данных (certno1), оставив все отображаемые данные –

0

Если вы используете, например, Microsoft SQL Server есть функция EXCEPT, которая возвращает различные строки между 2 таблиц с одинаковыми fileds (одинаковые имена, одни и те же типы и те же позиции). В Oracle есть операция MINUS, которая аналогична EXCEPT.

В MySQL не выполняется операция EXCEPT или MINUS, что является неудачным, поскольку в некоторых случаях это может привести к лучшим планам выполнения, чем альтернативы.

Это действительная альтернативная и более эффективная работа, чем использование NOT IN: реализовать соединение является лучшим решением в SQL.

enter code here 
SELECT a.* 
FROM table1 as a 
LEFT JOIN table2 as b 
ON a.tofolio = b.tofolio 
WHERE b.tofolio IS NULL 
Смежные вопросы