查询两个表以获取不同/单独的值


Query two tables for different/separate values

我有两个表:

任务
ID 名称到期日期完成项目ID

项目
ID 名称到期日期完成

我需要在两个表中查询具有相同数据的行。我尝试做一个示例语句,只是寻找 complete=0 的行,但从未得到任何结果。我认为这与使用 OR 而不是 AND 有关,但它现在只比我的水平高一点......有什么想法吗?

澄清一下,我不是在寻找重复的行,而是在寻找"已完成 = 0 的所有任务和项目"

查询为:

SELECT * FROM "task" t, "project" p WHERE t.dueDate = "2012-08-17" OR p.dueDate = "2012-08-17" AND t.completed = 0 OR p.completed = 0

确实设法让其中一个答案的代码工作,但是我意识到我的整个应用程序都是为了与一个表对话而编写的,并且仅将任务和项目表组合在一起并使用isProject列来区分项目和任务会容易得多。这也增加了在项目内嵌套项目的功能,因为项目现在也将有一个projectID列。

最终,KISS占了上风...

感谢所有的帮助!我会标记有效的答案,即使我不会使用它。

尝试使用括号。

SELECT * FROM "task" t, "project" p WHERE (t.dueDate = "2012-08-17" OR p.dueDate = "2012-08-17") AND (t.completed = 0 OR p.completed = 0)

如果您只想从 dueDate='2012-08-17' 开始仅与两个表中的值匹配且 complete=0:

可以使用 join 将该表结果绑定为一个。内部联接将仅返回两端匹配的结果。因此,您可以使用它在两个表中匹配它们,然后按经典过滤您想要的值,其中:

select * from task t inner join project p on t.dueDate = p.dueDate and t.completed = p.completed
where t.dueDate = '2012-08-17' and t.completed = 0

试试这个:

SELECT dueDate, completed
FROM task AS t 
WHERE (dueDate = "2012-08-17" AND completed = 0)
UNION ALL
SELECT dueDate, completed
FROM project AS p
WHERE (dueDate = "2012-08-17" AND completed = 0)

这应该为您提供每个表的所有记录,其中dueDate = "2012-08-17"completed = 0