MySQL具有附加字段的不匹配记录

时间:2014-11-06 17:01:42

标签: 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)?

2 个答案:

答案 0 :(得分:0)

我认为你的问题有点过于宽泛,你对t2.newdata的要求是什么?

你想要做的事情并不像我一样有效。你想从t2获取newData,其中t2.complete!= t1.complete,那你怎么知道使用哪个t2值?你怎么知道哪些行与它们相匹配?

我将等待您的评论,确切地说,您需要表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中选择所有行,并且会在new {complete字段在table2中具有匹配行的位置放置一个值。如果没有匹配的行,则该值为null。

有关详细信息,请参阅此SQL Fiddle以及上述外部联接链接。

答案 1 :(得分:-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