2014-11-06 2 views
0

У меня есть следующий запрос, который работает просто отлично:MySQL непарные записей с дополнительными полями

SELECT lastname, firstname, date, complete 
FROM table1 
WHERE complete NOT IN (SELECT complete FROM table2) 
ORDER BY lastname 

Меня попросили предоставить информацию из столбцов, которые в table2, но НЕ в table1. Как так:

SELECT t1.lastname, t1.firstname, t1.date, t1.complete, t2.newdata 
FROM table1 t1, table2 t2 
WHERE t1.complete NOT IN (SELECT t2.complete FROM table2) 
ORDER BY lastname 

Однако, как это не работает, или это как-то попал в петлю, потому что я должен был убить процесс через 2 часа.

Есть ли способ включить данные из таблицы, которая сравнивается (таблица2)?

+0

См. Сведения о присоединениях (в частности, многообразие OUTER и так называемые исключения) – Strawberry

+0

OP, каковы ваши требования для t2.newdata? Как относится к таблице 1? Вы хотите, чтобы newData совпадала с полными значениями или там, где их нет? Вы собираетесь делать декартовую продукцию? – AdamMc331

ответ

0

Я думаю, что вы вопрос немного слишком широк, что ваши требования к t2.newdata?

Что вы пытаетесь сделать, мне не кажется, что это когда-либо будет работать. Вы хотите получить newData из t2, где t2.complete! = T1.complete, так как вы знаете, какие значения t2 использовать? И как вы знаете, с какими строками они соответствуют?

I думаю, и я буду ждать от вас замечания, чтобы точно знать, что вы хотите получить всю эту информацию из таблицы 1 и только информацию из таблицы 2, когда она совпадает. Это описывает outer join.

попробовать что-то вроде этого:

SELECT t1.lastName, t1.firstName, t1.date, t1.complete, t2.newData 
FROM table1 t1 
LEFT JOIN table2 t2 ON t2.complete = t1.complete 
ORDER BY t1.lastName; 

Как я уже сказал, это будет выбрать все строки из table1 и поместит значение в столбце NewData везде, где complete поле имеет соответствующую строку в table2. Если нет соответствующей строки, значение равно null.

См. Это SQL Fiddle, а также приведенную выше ссылку на внешнюю ссылку для получения дополнительной информации.

+0

Ваше предположение было верным. Я думал об этом назад. Спасибо, что выпрямил меня. –

+0

@Mr_Thomas вот что вы сюда пришли, не так ли? ;) Рад, что смог помочь. – AdamMc331

-2

Попробуйте это:

SELECT t1.lastname, t1.firstname, t1.date, t1.complete, t2.newdata 
FROM table1 t1 
    join table2 t2 on t2.id=t1.id and t1.complete !=t2.complete 

ORDER BY t1.lastname 
+0

Единственная проблема, с которой я вижу, это 't2.id = t1.id', потому что table2 не имеет идентификатора. Поля, перечисленные мной, были единственными, которые были одинаковыми в обеих таблицах. Я использую 'complete', потому что это уникальный номер. Могу ли я принять эту часть? –

+0

Если вам нужны все t2.newdata, почему вы не переключаетесь между t1 и t2. – Gael

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