2011-12-21 2 views
1

У меня возникли проблемы здесь. Предположим, у меня есть две таблицы, единственная уникальная вещь между записями - их штрих-код. Я использую этот код:Сравнивать (JOIN) таблицы и получать новые записи

INSERT INTO rez1(barcode,No_,lik_pagr,inventkiekis,Vidurkis,skirias) 
SELECT t2.barcode, t2.No_, t1.lik_pagr, t2.lik_pagr, ROUND(t2.lik_pagr - t1.lik_pagr,3) AS 'Vidurkis', CASE WHEN (t1.lik_pagr - t2.lik_pagr)<>0 THEN 1 
ELSE 0 
END 
FROM likuciai AS t1 
INNER JOIN pirmoji AS t2 
ON t1.barcode = t2.barcode; 

Проблема здесь у меня есть - что он выбирает только записи, которые присутствуют в обеих таблицах (ON штрихкода), но как я могу также получить записи, штрих-код не совпадает с таблицей t1? Причина t2 - это всегда обновленная пользователем таблица, а t1 - старая, и мне нужно показать и применить ту же арифметику к этим записям, как и к тем, которые соответствуют.

ответ

2

Вам необходимо использовать ЛЕВЫЙ ВСТУПЛЕНИЕ. Просто замените «INNER» на «LEFT». Это приведет к получению всех записей из t1 и возвращает NULL для значений t2, где t1.barcode не имеет соответствующего штрих-кода в t2.

+0

Мне трудно сказать, что я хочу, но мне нужно получить все записи от t2 не от t1. SQLite не имеет права JOIN, поэтому мне нужно изменить значения из ON t1.barcode = t2.barcode; to ON t2.barcode = t1.barcode; и использовать левое соединение? thanks/ – Tommix

+0

И как я узнаю, какие записи являются новыми? – Tommix

+0

@Tommix: Я бы посоветовал пойти и посмотреть какую-то помощь по левому присоединению. В сущности, хотя левое соединение говорит, что я хочу все из левой таблицы (т.е. первого) и всего, что соответствует в правой (то есть во второй таблице) и null, если nohign соответствует. Добавление предложения where, чтобы сказать, что «правильное идентификатор поля таблицы равно null» даст вам записи, которые находятся только в левой таблице, а не в правой таблице. Итак, это просто случай размещения ваших столов в нужном месте. :) – Chris

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