我有以下查询可以正常使用:
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 :(得分: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